题目描述:给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。
代码:
class Solution {
public:
vector<ListNode*> splitListToParts(ListNode* root, int k) {
vector<ListNode*>parts(k,nullptr);
int len=0;
for(ListNode*node=root;node;node=node->next)
len++;
int n=len/k,r=len%k;
ListNode*node=root,*prev=nullptr;
for(int i=0;node&&i<k;i++,r--){
parts[i]=node;
for(int j=0;j<n+(r>0);j++){
prev=node;
node=node->next;
}
prev->next=nullptr;
}
return parts;
}
};