题目描述
思路
该题有三个参数,第三个参数的用处是记录k,所以就在结尾吧k赋值即可。
分割len = n/ k;
有多余的(i + 1 <= n % k) len ++;
利用二维数组output[i][j],i代表第几个,j代表里面的k个值;
注意要不满足k个少的要用NULL补齐。
算法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
struct ListNode** splitListToParts(struct ListNode* head, int k, int* returnSize) {
struct ListNode** output =malloc(k * sizeof(struct ListNode*));
struct ListNode* p = head;
int n = 0,retSize = 0;
while(p){
n ++;
p = p->next;
}
p = head;
for(int i = 0;i < k;i ++)
{
int len = n / k;
if(i + 1 <= n % k) len ++;
output[i] = p;
for(int j = 0;j < len -1;j ++) p = p->next;
if(p)
{
struct ListNode*q = p->next;
p->next = NULL;
p = q;
}
}
*returnSize = k;
return output;
}