-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathReverseNodesInEvenLengthGroups.java
114 lines (108 loc) · 3.37 KB
/
ReverseNodesInEvenLengthGroups.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*https://leetcode.com/problems/reverse-nodes-in-even-length-groups/*/
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseEvenLengthGroups(ListNode head) {
int count = 0, targetCount = 1;
ListNode rest = null, temp = head, point = head, start = head, end = head;
while (temp != null)
{
++count;
end = temp;
temp = temp.next;
if (count == targetCount || temp == null)
{
if ((targetCount == count && targetCount%2 == 0) || (temp == null && count%2 == 0))
{
rest = temp;
ListNode[] reversedList = reverse(start,end);
point.next = reversedList[0];
reversedList[1].next = rest;
point = reversedList[1];
}
else
point = end;
start = temp;
end = temp;
count = 0;
++targetCount;
}
}
return head;
}
private ListNode[] reverse(ListNode start, ListNode end)
{
ListNode[] result = new ListNode[]{end,start};
ListNode reversedList = reverseRecur(start, end);
start.next = null;
return result;
}
private ListNode reverseRecur(ListNode node, ListNode end)
{
if (node == end) return node;
ListNode reversedList = reverseRecur(node.next,end);
node.next.next = node;
return reversedList;
}
}
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseEvenLengthGroups(ListNode head) {
int count = 0, targetCount = 1;
ListNode rest = null, temp = head, point = head, start = head, end = head;
while (temp != null)
{
++count;
end = temp;
temp = temp.next;
if (count == targetCount || temp == null)
{
if ((targetCount == count && targetCount%2 == 0) || (temp == null && count%2 == 0))
{
rest = temp;
ListNode reversedList = reverse(start,end);
point.next = reversedList;
start.next = rest;
point = start;
}
else
point = end;
start = temp;
end = temp;
count = 0;
++targetCount;
}
}
return head;
}
private ListNode reverse(ListNode start, ListNode end)
{
ListNode reversedList = reverseRecur(start, end);
start.next = null;
return end;
}
private ListNode reverseRecur(ListNode node, ListNode end)
{
if (node == end) return node;
ListNode reversedList = reverseRecur(node.next,end);
node.next.next = node;
return reversedList;
}
}