Skip to content

Commit 02d8759

Browse files
committed
feat(92): 翻转链表
1 parent c91870d commit 02d8759

File tree

1 file changed

+35
-22
lines changed

1 file changed

+35
-22
lines changed

Linked-List/92/solution1.js

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,44 @@
11
/**
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)
124
*/
135
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;
178

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++) {
2012
preHead = preHead.next;
2113
}
2214

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;
2943
}
30-
return newHead.next;
3144
}

0 commit comments

Comments
 (0)