将元素(tail前的元素)按照顺序插入到tail(即需要翻转的链表的最后一个元素)后
第一轮:
pre cur tail
1->2->3->4->5
设置一个dummy,dummy.next = head
tail 指向要翻转最后一个元素,即5,
pre =dummy
cur = pre.next 指向当前翻转的元素,即1
然后翻转元素
cur = pre.next;
pre.next = cur.next;
cur.next = tail.next;
tail.next = cur;
第二轮
pre cur tail
2->3->4->5->1
//力扣45题解法
//k为翻转的个数
public static ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0);
dummy.next=head;
ListNode pre = dummy,tail = dummy;
while(true){
int cnt =0;
while(tail!=null && cnt!=k){
cnt++;
tail = tail.next;
}
if(tail == null) break;
ListNode tmpHead = pre.next;
while(pre.next!=tail){
ListNode cur = pre.next;
pre.next = cur.next;
cur.next = tail.next;
tail.next = cur;
}
pre = tmpHead;
tail = tmpHead;
}
return dummy.next;
}