1. len/k=a...b,共k个part,每个part有a个节点,余下的b的节点,从第一个节点开始,每个节点多加一个。
class Solution { public: vector<ListNode*> splitListToParts(ListNode* root, int k) { vector<ListNode*> vec(k,nullptr); if(!k) return vec; int len=0; ListNode* node=root; while(node) { ++len; node=node->next; } int quo=len/k,rem=len%k; vector<int> nums(k,quo); for(int i=0;i<rem;++i) { ++nums[i]; } node=root; for(int i=0;i<nums.size();++i) { if(!nums[i]) break; vec[i]=node; for(int k=nums[i];k>1&&node;--k,node=node->next); ListNode* tmp=node->next; node->next=nullptr; node=tmp; } return vec; } };
2.
class Solution { public: vector<ListNode*> splitListToParts(ListNode* root, int k) { vector<ListNode*> vec(k,nullptr); if(!k) return vec; int len=0; ListNode* node=root; while(node) { ++len; node=node->next; } int quo=len/k,rem=len%k,i=0; node=root; for(;i<rem;++i) { vec[i]=node; for(int j=0;j<quo&&node;++j,node=node->next); ListNode *tmp=node->next; node->next=nullptr; node=tmp; } for(;i<k;++i) { if(!node) break; vec[i]=node; for(int j=0;j<quo-1&&node;++j,node=node->next); ListNode *tmp=node->next; node->next=nullptr; node=tmp; } return vec; } };