题解 | 牛群的重新分组
牛群的重新分组
https://www.nowcoder.com/practice/267c0deb9a6a41e4bdeb1b2addc64c93
- guard 用好简化
- 反转链表小函数其实可以不返回值,传入的是 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;
}
}

查看24道真题和解析