Skip to content

Commit 83d4fa8

Browse files
authored
Create Reverse Nodes in Even Length Groups.java
1 parent e207ab9 commit 83d4fa8

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* int val;
5+
* ListNode next;
6+
* ListNode() {}
7+
* ListNode(int val) { this.val = val; }
8+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+
* }
10+
*/
11+
class Solution {
12+
public ListNode reverseEvenLengthGroups(ListNode head) {
13+
if (head == null) {
14+
return head;
15+
}
16+
int numOfNodes = 1;
17+
ListNode prev = null;
18+
ListNode curr = head;
19+
int totalNumOfNodes = 0;
20+
while (curr != null) {
21+
totalNumOfNodes++;
22+
curr = curr.next;
23+
}
24+
curr = head;
25+
while (curr != null) {
26+
numOfNodes = Math.min(numOfNodes, totalNumOfNodes);
27+
totalNumOfNodes -= numOfNodes;
28+
if (numOfNodes % 2 == 0) {
29+
ListNode[] res = reverseList(curr, numOfNodes);
30+
prev.next = res[0];
31+
prev = curr;
32+
curr = res[1];
33+
} else {
34+
for (int i = 0; i < numOfNodes && curr != null; i++) {
35+
prev = curr;
36+
curr = curr.next;
37+
}
38+
}
39+
numOfNodes++;
40+
}
41+
return head;
42+
}
43+
44+
private ListNode[] reverseList(ListNode node, int n) {
45+
ListNode prev = null;
46+
ListNode curr = node;
47+
ListNode post = null;
48+
while (n-- > 0) {
49+
post = curr.next;
50+
curr.next = prev;
51+
prev = curr;
52+
curr = post;
53+
}
54+
node.next = curr;
55+
return new ListNode[]{prev, post};
56+
}
57+
}

0 commit comments

Comments
 (0)