Day26: [LeetCode中等] 725. 分隔链表

Day26: [LeetCode中等] 725. 分隔链表

题源:

来自leetcode题库:

https://leetcode-cn.com/problems/split-linked-list-in-parts/

思路:

这道题代码很简单,思路上需要注意的是:怎么确定当前要分的vector的长度。如果你要是简单的用除法就会出问题,比如8个值分为三份,应该分为3,3,2。但是8/3=2,加上余下的2个就成了4,2,2。这显然不对。如果考虑把余下的两个变成1+1分配出去,就会把问题复杂化。
我的办法是:还是拿8个值分三份举例,先8/3=2,可见余数为2不为0,所以要分出2+1个值(若这里余数为0,则分出两个值)。完成第一次分数组后,8-3=5,因为要分的份数减一了,所以下一次就是就是5/2=2,余数为1不为0,要分出2+1个值,以此类推。

代码:

dirty code凑合看吧

/**
 * 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;
        auto p=root;
        int Len=0;
        while(p){
            Len++;
            p=p->next;
        }
        if(k>=Len){
            p=root;
            while(p){
                res.push_back(p);
                auto temp=p;
                p=p->next;
                temp->next=NULL;
            }
            for(int i=0;i<k-Len;i++){
                res.push_back(NULL);
            }
        }else{
            
            auto pre=p=root;
            int cishu=k;
            for(int j=0;j<cishu;j++){
                int l=Len/k,yu=Len%k;
                if(yu!=0) {
                    l++;
                    res.push_back(p);
                    if(p!=root){
                    pre->next=NULL;
                    }
                    for(int i=0;i<l;i++){
                    pre=p;
                    p=p->next;
                    }
                    Len-=l;k--;
                }else{
                    res.push_back(p);
                    if(p!=root){
                    pre->next=NULL;
                    }
                    for(int i=0;i<l;i++){
                    pre=p;
                    p=p->next;
                    }
                    Len-=l;k--;
                }
            }
        }
        return res;
    }
};
发布了49 篇原创文章 · 获赞 13 · 访问量 522

猜你喜欢

转载自blog.csdn.net/qq2215459786/article/details/103265427