分隔链表(leetcode725)c++
https://leetcode-cn.com/problems/split-linked-list-in-parts/
//如果链表有N个结点,则分隔的链表中每个部分中都有n/k个结点,且前N%k部分有一个额外的结点。
//对于每个部分,有 width + (i < rem ? 1 : 0) 个结点
//首先计算得长度,每个部分的宽度
//然后创建vector
//最后直接拆分原链表,把新链表存入vector中
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<ListNode*> splitListToParts(ListNode* root, int k) {
//如果链表有N个结点,则分隔的链表中每个部分中都有n/k个结点,且前N%k部分有一个额外的结点。
//对于每个部分,有 width + (i < rem ? 1 : 0) 个结点
//首先计算得长度,每个部分的宽度
//然后创建vector
//最后直接拆分原链表,把新链表存入vector中
//--[1]--
ListNode *p;
p=root;
int len=0;
while(p){
len++;
p=p->next;
}
int width = len / k, remainder= len % k;
//~
//--[2]--
std:: vector <ListNode *> node_vec;
//~
//--[3]--
p=root;
for(int i=0; i<k; i++){
ListNode *new_head=p;
for(int j=1; j<width+(i<remainder?1:0); j++){
if(p){
p=p->next;
}
}
if(p){
ListNode *pre=p;
p=p->next;
pre->next=nullptr;
}
node_vec.push_back(new_head);
}
//~
//--[4]--
return node_vec;
//~
}
};