. - 力扣(LeetCode)
一、题目描述
二、过程模拟
1. 第一步
2. 第二步:子链表分组
3. 第三步:断开前后两组
4. 第四步:翻转start到end的部分
5. 第五步:连接翻转好的前半部分和未翻转的后半部分,并重置pre和end
三、完整代码
public ListNode reverseKGroup(ListNode head, int k) {if(head == null || head.next == null) return head;ListNode dummy = new ListNode(-1);dummy.next = head;ListNode pre = dummy;ListNode end = dummy;while(end != null){for(int i=0; i<k && end != null; ++i){end = end.next;}if(end == null){break;}ListNode start = pre.next;ListNode next = end.next;end.next = null;pre.next = reverse(start);start.next = next;pre = start;end = start;}return dummy.next;}public ListNode reverse(ListNode head){ListNode pre = null;ListNode cur = head;while(cur != null ){ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;}