25. Reverse Nodes in k-Group
按组翻转链表
https://leetcode.com/problems/reverse-nodes-in-k-group/
v1
迭代实现,连接细节。
public class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode b, pre, cur, start, end, t;int i;
b = new ListNode();b.next = head;pre = b;end = head;
while (true) {
cur = start = end;
for (i = 0; i < k && end != null; i++) end = end.next;
if (i != k) break;
while (cur != end) {
t = cur.next;
cur.next = pre;
pre = cur;
cur = t;
}
start.next.next = pre;
start.next = end;
pre = start;
}
return b.next;
}
}
v2
递归解法,该问题具备明显的递归性质
public class SolutionV2 {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode pre, cur, end, t; int i;
// 检查长度
for(end = head,i = 0;i < k && end != null;i++)end = end.next;
if(i != k) return head;
// 开始翻转
cur = head.next; pre = head;
while (cur != end) {
t = cur.next;
cur.next = pre;
pre = cur;
cur = t;
}
// 翻转剩余链
head.next = reverseKGroup(end, k);
return pre;
}
}