File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed
remove-nth-node-from-end-of-list Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for singly-linked list.
3
+ * function ListNode(val, next) {
4
+ * this.val = (val===undefined ? 0 : val)
5
+ * this.next = (next===undefined ? null : next)
6
+ * }
7
+ */
8
+
9
+ // 첫 번째 풀이
10
+ // 시간복잡도: O(n)
11
+ // 공간복잡도: O(n)
12
+ /**
13
+ * @param {ListNode } head
14
+ * @param {number } n
15
+ * @return {ListNode }
16
+ */
17
+ const removeNthFromEnd = function ( head , n ) {
18
+ function dfs ( node ) {
19
+ // 마지막 노드이면 1 반환
20
+ if ( ! node . next ) {
21
+ return 1 ;
22
+ }
23
+
24
+ const nth = dfs ( node . next ) ;
25
+ if ( nth === n ) {
26
+ node . next = node . next . next ?? null ;
27
+ }
28
+
29
+ return nth + 1 ;
30
+ }
31
+
32
+ if ( dfs ( head ) === n ) {
33
+ return head . next ;
34
+ }
35
+
36
+ return head ;
37
+ } ;
38
+
39
+ // 두 번째 풀이
40
+ // 시간복잡도: O(n)
41
+ // 공간복잡도: O(1)
42
+ const removeNthFromEnd = function ( head , n ) {
43
+ const temp = new ListNode ( 0 , head ) ;
44
+ let tail = temp ;
45
+ let prev = temp ; // 뒤에서 n번째 노드
46
+
47
+ for ( let i = 0 ; i < n ; i ++ ) {
48
+ tail = tail . next ;
49
+ }
50
+
51
+ while ( tail . next ) {
52
+ tail = tail . next ;
53
+ prev = prev . next ;
54
+ }
55
+
56
+ prev . next = prev . next . next ;
57
+
58
+ return temp . next ;
59
+ } ;
You can’t perform that action at this time.
0 commit comments