leetcode 725 Split Linked List in Parts

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;
    }
};

猜你喜欢

转载自www.cnblogs.com/LiuQiujie/p/12671348.html
今日推荐