Skip to content

Commit a74c82a

Browse files
committed
add Remove Nth Node From End of List solution
1 parent 7a6663c commit a74c82a

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/**
2+
* [Problem]: [19] Remove Nth Node From End of List
3+
* (https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/)
4+
*/
5+
6+
class ListNode {
7+
val: number;
8+
next: ListNode | null;
9+
constructor(val?: number, next?: ListNode | null) {
10+
this.val = val === undefined ? 0 : val;
11+
this.next = next === undefined ? null : next;
12+
}
13+
}
14+
15+
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
16+
// 시간복잡도 O(N)
17+
// 공간복잡도 O(1)
18+
function lengthFunc(head: ListNode | null, n: number): ListNode | null {
19+
let length = 0;
20+
let current = head;
21+
while (current) {
22+
length++;
23+
current = current.next;
24+
}
25+
26+
let dummy = new ListNode(0, head);
27+
current = dummy;
28+
29+
for (let i = 0; i < length - n; i++) {
30+
current = current?.next!;
31+
}
32+
33+
current.next = current.next!.next || null;
34+
35+
return dummy.next;
36+
}
37+
38+
// 시간복잡도 O(N)
39+
// 공간복잡도 O(1)
40+
function twoPointerFunc(head: ListNode | null, n: number): ListNode | null {
41+
let first = head;
42+
43+
for (let i = 0; i < n; i++) {
44+
first = first?.next!;
45+
}
46+
47+
let dummy = new ListNode(0, head);
48+
let second = dummy;
49+
50+
while (first) {
51+
first = first.next;
52+
second = second.next!;
53+
}
54+
55+
second.next = second.next?.next || null;
56+
return dummy.next;
57+
}
58+
}

0 commit comments

Comments
 (0)