挺复杂的一道链表题,但是也是慢慢磨出来了。
先计算链表长度,看看每k个可以分配几个结点。
不能只考虑不够的情况,还要考虑多的情况
用yu=len%k算出有哪几个是多一个的
这段代码特别关键,如果这一个链表需要多一个,而且num>0的话就往后走一格,因为如果只要0个的话,其实也就是要1个或者0个,而要一个的操作我们在下面就会实现
if(yu-- > 0 && num > 0) head = head->next;
/**
* 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*> res;
//先计算链表长度,看看每k个可以分配几个结点,如果只能分配0个的话,那就是分配一个,不够的用null来填充
//不能只考虑不够的情况,还要考虑多的情况
int len = 0;
ListNode* head = root;
while(root != NULL){
len++;
root = root->next;
}
int num = len/k;
//要算出有哪几个是多一个的
int yu =len%k;
while(res.size() != k){
ListNode* tmp = head;
for(int i = 0; i < num-1; ++i){
if(head != NULL) head = head->next;
}
if(head != NULL){
if(yu-- > 0 && num > 0) head = head->next;
ListNode* newNode = head->next;
head->next = NULL;
head = newNode;
}
res.push_back(tmp);
}
return res;
}
};