public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0);
dummy.next = head;
head = dummy;
while (head != null) {
head = reverseK(head, k);
}
return dummy.next;
}
public ListNode reverseK(ListNode head, int k) {
ListNode n1 = head.next;
ListNode nk = head;
for (int i = 0; i < k; i++) {
nk = nk.next;
if (nk == null) {
return null;
}
}
ListNode nkPlus = nk.next;
ListNode prev = null;
ListNode cur = n1;
while (cur != nkPlus) {
ListNode temp = cur.next;
cur.next = prev;
prev = cur;
cur = temp;
}
head.next = nk;
n1.next = nkPlus;
return n1;
}