题解 | 牛群的重新分组

牛群的重新分组

https://www.nowcoder.com/practice/267c0deb9a6a41e4bdeb1b2addc64c93

  1. guard 用好简化
  2. 反转链表小函数其实可以不返回值,传入的是 head 所以已经知道尾巴节点,而首节点就是 cur.

import java.util.*;

public class Solution {
    public void reverseList(ListNode head) {
        ListNode pre = null, cur = head;
        while (cur != null) {
            final ListNode nxt = cur.next;
            cur.next = pre;
            pre = cur;
            cur = nxt;
        }
    }

    public ListNode reverseKGroup (ListNode head, int k) {
        ListNode guard = new ListNode(-1);
        guard.next = head;
        ListNode lastGroupTail = guard, cur = head;
        int cnt = 0;
        while (cur != null) {
            cnt += 1;
            if (cnt % k == 0) {
                final ListNode nxt = cur.next;
                cur.next = null;
                reverseList(lastGroupTail.next);
                // cur -> curGroupHead. lastGroupTail.next -> curGroupTail.
                final ListNode curGroupTail = lastGroupTail.next;
                lastGroupTail.next = cur;
                curGroupTail.next = nxt;
                lastGroupTail = curGroupTail;
                cur = nxt;
            } else {
                cur = cur.next;
            }
        }
        return guard.next;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务