Skip to content

Commit b234fe8

Browse files
authored
Update Reverse Linked List II.java
1 parent c9d4f1a commit b234fe8

File tree

1 file changed

+37
-35
lines changed

1 file changed

+37
-35
lines changed

Medium/Reverse Linked List II.java

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,41 +9,43 @@
99
* }
1010
*/
1111
class Solution {
12-
public ListNode reverseBetween(ListNode head, int left, int right) {
13-
ListNode prev = null;
14-
ListNode start = head;
15-
for (int i = 1; i < left; i++) {
16-
prev = start;
17-
start = start.next;
12+
public ListNode reverseBetween(ListNode head, int left, int right) {
13+
ListNode curr = head;
14+
ListNode prevToLeft = null;
15+
for (int i = 1; i < left; i++) {
16+
prevToLeft = curr;
17+
curr = curr.next;
18+
}
19+
ListNode nextToLeft = prevToLeft == null ? head : prevToLeft.next;
20+
for (int i = left; i < right; i++) {
21+
curr = curr.next;
22+
}
23+
ListNode nextToRight = curr.next;
24+
curr.next = null;
25+
if (prevToLeft != null) {
26+
prevToLeft.next = null;
27+
}
28+
ListNode reversedStart = reverse(nextToLeft);
29+
if (prevToLeft != null) {
30+
prevToLeft.next = reversedStart;
31+
}
32+
curr = reversedStart;
33+
while (curr.next != null) {
34+
curr = curr.next;
35+
}
36+
curr.next = nextToRight;
37+
return prevToLeft == null ? reversedStart : head;
1838
}
19-
ListNode end = start;
20-
for (int i = left; i < right; i++) {
21-
end = end.next;
39+
40+
private ListNode reverse(ListNode head) {
41+
ListNode prev = null;
42+
ListNode curr = head;
43+
while (curr != null) {
44+
ListNode next = curr.next;
45+
curr.next = prev;
46+
prev = curr;
47+
curr = next;
48+
}
49+
return prev;
2250
}
23-
ListNode nextToEnd = end.next;
24-
end.next = null;
25-
ListNode reverseStart = reverse(start);
26-
if (prev != null) {
27-
prev.next = reverseStart;
28-
}
29-
ListNode curr = reverseStart;
30-
while (curr.next != null) {
31-
curr = curr.next;
32-
}
33-
curr.next = nextToEnd;
34-
return prev == null ? reverseStart : head;
35-
}
36-
37-
private ListNode reverse(ListNode node) {
38-
ListNode prev = null;
39-
ListNode next = null;
40-
ListNode curr = node;
41-
while (curr != null) {
42-
next = curr.next;
43-
curr.next = prev;
44-
prev = curr;
45-
curr = next;
46-
}
47-
return prev;
48-
}
4951
}

0 commit comments

Comments
 (0)