题目来源:https://leetcode-cn.com/problems/split-linked-list-in-parts/
题目描述:
解法描述:
对于这个题目,我们首先要计算出链表的总长度,和分隔成k个链表后,每个链表的长度。所以关键就在于怎么控制分隔后的每个链表长度,其他的问题就简单了。我们直接来看代码
代码如下:
class Solution {
public:
vector<ListNode*> splitListToParts(ListNode* root, int k) {
vector<ListNode*> ret;
ListNode* cur = root;
int count = 0;
//先遍历一遍链表计算出长度
while (cur) {
count++;
cur = cur->next;
}
cur = root;
//计算出分成k个链表后,每个链表至少有多长
int size = count / k;
//计算这个余数是为了计算每个链表长度是在size基础上+1还是+0
int rem = count%k;
for (int i = 0; i < k; ++i) {
if (cur) {
ListNode* Head = new ListNode(-1);
ListNode* prev = Head;
//根据余数判断链表长度在size基础上+1还是+0
for (int j = 0; j < size + (rem > 0?1:0); ++j) {
prev->next = new ListNode(cur->val);
prev = prev->next;
cur = cur->next;
}
//每次生成一根链表就要把余数减1,否则后续每个链表长度都会在size基础上+1
rem--;
//生成一根链表就把这个链表放到vector容器中
ret.push_back(Head->next);
}
//如果原链表不够分隔,那么只能将null放入vector中
else {
ret.push_back(NULL);
}
}
return ret;
}
};