public class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if (head==nullhead.next==nullk<2) return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode tail = dummy, prev = dummy,temp;
int count;
while(true){
count =k;
while(count>0&&tail!=null){
count;
tail=tail.next;
}
if (tail==null) break;//Has reached the end
head=prev.next;//for next cycle
// prev>temp>...>....>tail>....
// Delete @temp and insert to the next position of @tail
// prev>...>...>tail>head>...
// Assign @temp to the next node of @prev
// prev>temp>...>tail>...>...
// Keep doing until @tail is the next node of @prev
while(prev.next!=tail){
temp=prev.next;//Assign
prev.next=temp.next;//Delete
temp.next=tail.next;
tail.next=temp;//Insert
}
tail=head;
prev=head;
}
return dummy.next;
}
}
Share my Java Solution with comments in line


@zilchistdeepblue no because after the adjustment the original pre.next will be at the position of the original tail, which will grantee the program to enter the next cycle.

@zilchistdeepblue It's right because current prev.next will be the head of the next cyle