/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if (head == null || k <= 1) {
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode ptr = dummy;
boolean isTail = false;
while (true) {
ListNode cur = ptr;
for (int i = 0; i < k; i++) {
cur = cur.next;
if (cur == null) {
isTail = true;
break;
}
}
if (isTail) {
break;
}
ptr = myReverse(ptr, k);
}
return dummy.next;
}
ListNode myReverse(ListNode ptr, int k) {
ListNode tail = ptr.next;
for (int i = 0; i < k - 1; i++) {
ListNode temp = tail.next;
tail.next = temp.next;
temp.next = ptr.next;
ptr.next = temp;
}
return tail;
}
}
2、边走边Reverse,最后把末尾的再Reverse回去。