分隔链表
题目链接:分隔链表
/**
* 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) {
vector<ListNode*> vc;
//首先求出链表的长度
int len = 0;
ListNode *p,*q,*r,*pre;
for(p=root;p!=NULL;p=p->next,len++);
int num = len/k; //每组分配多少个结点
int rem = len%k; //多余多少个结点
ListNode* cur = root;
pre = cur;
for(int i=0;i<k;i++){
ListNode* head = cur;
pre = cur; //
for(int j=0;j< num + (i<rem?1:0);j++){ //控制每个组分配多少个结点,按照顺序,最多多一个且从左到右开始
if(cur){
pre = cur; //记录尾结点,方便断开链表
cur = cur->next;
}
}
if(pre){ //空指针
pre->next = NULL;
}
vc.push_back(head);
}
return vc;
}
};