题意:将原链表分隔成k个链表,要求所有分隔的链表长度差异至多为1,且前面的链表长度必须大于等于后面的链表长度。
分析:
(1)首先计算链表总长len
(2)根据len得到分隔的链表长度要么为size,要么为size+1,由于前面的链表长度必须大于等于后面的链表长度,因此,前mod个分隔的链表长度为size+1,其他分隔的链表长度为size
(3) vector<ListNode*> ans(k)----k个ListNode*,每个元素都初始化为NULL:对于原链表为NULL,或是len<k的情况很友好
(4)注意:每个分隔的链表末尾指向NULL
(5)要被这句if(mod-- > 0)坑死了,如果写成if(mod)的话,mod为负的情况也会进if
/** * 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) { ListNode *tmp = root; int len = 0; while(tmp){ tmp = tmp -> next; ++len; } int splitlen = len / k; int mod = len % k; vector<ListNode*> ans(k); for(int i = 0; i < k && root; ++i){ int tmplen = splitlen; if(mod-- > 0) ++tmplen; ans[i] = root; for(int j = 0; j < tmplen - 1; ++j){ root = root -> next; } tmp = root -> next; root -> next = NULL; root = tmp; } return ans; } };