725 分隔链表 :给定一个头结点为 root
的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null
。这 k 个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个由上述 k 部分组成的数组。
1 | 输入:head = [1,2,3], k = 5 |
函数接口:
1 | struct ListNode** splitListToParts(struct ListNode* head, int k, int* returnSize); |
该题就是正常的遍历,然后划分即可。首先,一次遍历计算链表的长度 size
;然后,根据链表长度 size
和 k
值,计算划分的链表的长度,前 size % k
段的长度为 size / k + 1
,后 size - size % k
段的长度为 size / k
。
时间复杂度:O(n)
,两趟遍历,空间复杂度:O(1)
,不算输出占用的空间。
1 | struct ListNode** splitListToParts(struct ListNode* head, int k, int* returnSize){ |