LeetCode 725. Split Linked List

2020-05-02  本文已影响0人  微微笑的蜗牛

@(LeetCode)

问题描述

给定一个单链表的头节点 root,写一个函数将链表分为 k 个连续的链表分组。

每个分组中链表的长度应该尽量相等,且两个分组的长度差不超过 1。这会导致一些分组是 null

分组应该按照链表节点出现的顺序来划分,并且前面的分组长度大于等于其后的分组。

返回一个数组,每个元素是分组的头结点。

栗 1:

输入:root = [1, 2, 3], k = 5
输出:[[1],[2],[3],[],[]]

解释:
链表长度为 3,分为 5 个分组,那么每个分组的节点个数为 [1, 1, 1, 0, 0]。每个节点单独为一组,多余的分组为 null。

栗 2:

输入:root = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], k = 3
输出:[[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
解释:
链表长度为 10,分为 3 个分组,那么每个分组的节点个数为 [4, 3, 3]。

注意:

想看英文描述戳这里

解题思路

这道题的解法比较常规。简单说下思路:

  1. 若要把链表分组,那么得求出链表的长度 len

  2. 链表长度跟每个分组中的节点个数有关系,分为如下两种情况:

  1. 根据每个分组的节点个数,遍历链表,找到其对应的头结点。

    这里需要注意一点,每个分组中的链表尾节点需要切断原有联系,否则一直会链接到原链表尾。

完整代码可点此查看

上一篇下一篇

猜你喜欢

热点阅读