File tree Expand file tree Collapse file tree 1 file changed +34
-24
lines changed
Expand file tree Collapse file tree 1 file changed +34
-24
lines changed Original file line number Diff line number Diff line change 11// Time complexity: O(n)
2- // Space complexity: O(n )
2+ // Space complexity: O(1 )
33
44/**
55 * Definition for singly-linked list.
1313 * @return {void } Do not return anything, modify head in-place instead.
1414 */
1515var 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 ;
2636 }
2737
28- const answer = head ;
38+ // 합치기
39+ let back = next ;
40+ let reordered = head ;
2941
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 ;
3844
39- current = current . next ;
40- }
45+ reordered . next = back ;
46+ back = back . next ;
47+ reordered = reordered . next ;
4148
42- current . next = null ;
49+ reordered . next = temp ;
50+ reordered = reordered . next ;
4351 }
4452
45- return answer ;
53+ if ( reordered ) {
54+ reordered . next = null ;
55+ }
4656} ;
You can’t perform that action at this time.
0 commit comments