File tree 1 file changed +34
-24
lines changed 1 file changed +34
-24
lines changed Original file line number Diff line number Diff line change 1
1
// Time complexity: O(n)
2
- // Space complexity: O(n )
2
+ // Space complexity: O(1 )
3
3
4
4
/**
5
5
* Definition for singly-linked list.
13
13
* @return {void } Do not return anything, modify head in-place instead.
14
14
*/
15
15
var reorderList = function ( head ) {
16
- const nodes = [ ] ;
17
- let n = 0 ;
18
-
19
- {
20
- let current = head ;
21
- while ( current ) {
22
- n ++ ;
23
- nodes . push ( current ) ;
24
- current = current . next ;
25
- }
16
+ // middle 찾기
17
+ let slow = head ;
18
+ let fast = slow ;
19
+
20
+ while ( fast && fast . next ) {
21
+ fast = fast . next . next ;
22
+ slow = slow . next ;
23
+ }
24
+
25
+ const middle = slow ;
26
+
27
+ // 후반부 뒤집기 (middle 부터)
28
+ let next = null ;
29
+ let current = middle ;
30
+
31
+ while ( current ) {
32
+ const temp = current . next ;
33
+ current . next = next ;
34
+ next = current ;
35
+ current = temp ;
26
36
}
27
37
28
- const answer = head ;
38
+ // 합치기
39
+ let back = next ;
40
+ let reordered = head ;
29
41
30
- {
31
- let current = answer ;
32
- for ( let i = 1 ; i < n ; i ++ ) {
33
- if ( i % 2 !== 0 ) {
34
- current . next = nodes . at ( n - Math . ceil ( i / 2 ) ) ;
35
- } else {
36
- current . next = nodes . at ( i / 2 ) ;
37
- }
42
+ while ( reordered && back ) {
43
+ const temp = reordered . next ;
38
44
39
- current = current . next ;
40
- }
45
+ reordered . next = back ;
46
+ back = back . next ;
47
+ reordered = reordered . next ;
41
48
42
- current . next = null ;
49
+ reordered . next = temp ;
50
+ reordered = reordered . next ;
43
51
}
44
52
45
- return answer ;
53
+ if ( reordered ) {
54
+ reordered . next = null ;
55
+ }
46
56
} ;
You can’t perform that action at this time.
0 commit comments