File tree Expand file tree Collapse file tree 1 file changed +35
-22
lines changed Expand file tree Collapse file tree 1 file changed +35
-22
lines changed Original file line number Diff line number Diff line change 1
1
/**
2
- * https://leetcode-cn.com/problems/reverse-linked-list-ii/
3
- *
4
- * 92. 反转链表 II
5
- *
6
- * Medium
7
- *
8
- * O(n)
9
- *
10
- * 64ms 72.54%
11
- * 34,2mb 5.76%
2
+ * 时间复杂度:O(n)
3
+ * 空间复杂度:O(1)
12
4
*/
13
5
const reverseBetween = ( head , m , n ) => {
14
- // m = 1 时,头节点的问题
15
- const newHead = new ListNode ( - 1 ) ;
16
- newHead . next = head ;
6
+ const dummyHead = new ListNode ( null ) ;
7
+ dummyHead . next = head ;
17
8
18
- let preHead = newHead ;
19
- for ( let i = 0 ; i < m - 1 ; i ++ ) {
9
+ let preHead = dummyHead ;
10
+
11
+ for ( let i = 0 ; i < m - 1 ; i ++ ) {
20
12
preHead = preHead . next ;
21
13
}
22
14
23
- let currentHead = preHead . next ;
24
- for ( let i = m ; i < n ; i ++ ) {
25
- const nextHead = currentHead . next ;
26
- currentHead . next = nextHead . next ;
27
- nextHead . next = preHead . next ;
28
- preHead . next = nextHead ;
15
+ let rightHead = preHead ;
16
+ for ( let i = 0 ; i < n - m + 1 ; i ++ ) {
17
+ rightHead = rightHead . next ;
18
+ }
19
+
20
+ let leftHead = preHead . next ;
21
+ let sufHead = rightHead . next ;
22
+
23
+ preHead . next = null ;
24
+ rightHead . next = null ;
25
+
26
+ reverseLinkedList ( leftHead ) ;
27
+
28
+ preHead . next = rightHead ;
29
+ leftHead . next = sufHead ;
30
+
31
+ return dummyHead . next ;
32
+ }
33
+
34
+ function reverseLinkedList ( head ) {
35
+ let pre = null ;
36
+ let current = head ;
37
+
38
+ while ( current ) {
39
+ const next = current . next ;
40
+ current . next = pre ;
41
+ pre = current ;
42
+ current = next ;
29
43
}
30
- return newHead . next ;
31
44
}
You can’t perform that action at this time.
0 commit comments