Reverse Nodes in k-Group k个一组翻转链表

思路
代码都是从网上收集的
翻转k个节点的链表时,需要这个链表头结点之前的一个节点,也就是假头节点。链表翻转完后,这个假头结点要指向翻转完的链表的头结点。然后把链表的最后一个节点作为下一个需翻转的链表的假头结点。
head -> n1 -> n2 ... nk -> nk+1 => head -> nk -> nk-1 .. n1 -> nk+1 return n1
代码
public class Solution {
public ListNode ReverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0);
dummy.next = head;
head = dummy;
while (true) {
head = reverseK(head, k);
if (head == null) {
break;
}
}
return dummy.next;
}
public ListNode reverseK(ListNode head, int k) {
ListNode nk = head;
for (int i = 0; i < k; i++) {
if (nk == null) {
return null;
}
nk = nk.next;
}
if (nk == null) {
return null;
}
ListNode n1 = head.next;
ListNode nkplus = nk.next;
ListNode prev = null;
ListNode curt = n1;
while (curt != nkplus) {
ListNode temp = curt.next;
curt.next = prev;
prev = curt;
curt = temp;
}
head.next = nk;
n1.next = nkplus;
return n1;
}
}