Leetcode 725

我们第一轮肯定是要全部扫描一遍链表,否则我们不知道链表长度,分割也就无从谈起。

 

再看分割条件,划分为元素个数为k的数组,那么我们只需要计算出一个部分的长度,然后在第二次遍历链表的时候,把每个部分的第一个节点加入数组中,最后一个节点的next设为null即可。

 

那么一个部分的数量得是多少合适呢?由以下公式给出:

1. basicLen = n / k

2. rem = n % k

3. 对于第 i 组,其长度就是 len = basicLen + (i < rem? 1: 0)

 

最后讨论循环边界条件

1. 开始,curr = root

2. 分为 k 组,因为 i = 0 to k - 1

3. 计算出 len 之后,因为我们现在指向第一个元素,现在要把指针挪到最后一个元素,因此需要进行的是 len - 1 次取 next,即 j = 0 to len - 1

4. 我们拿一个 temp = curr,然后 curr = curr.next

5. temp.next = null

6. 如果有某些部分的长度为 0,那么 curr 将会变成 null,此时以上逻辑就不管用了。要么另外设置逻辑,将数组后续元素置 null,要么根据语言特性跳出循环,利用默认的 null 值直接返回。

posted on 2021-09-22 09:03  Ricochet!  阅读(24)  评论(0编辑  收藏  举报