zoukankan      html  css  js  c++  java
  • LeetCode 725. Split Linked List in Parts(分隔链表)

    题意:将原链表分隔成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;
        }
    };
    

      

  • 相关阅读:
    javascript 介绍
    命令提示符(命令行)
    node(1) hello world
    用Vgg16来提取特征
    VGG16学习
    注意力模型
    统计学习方法
    数字图像处理(五)
    数字图像处理(四)
    BN
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/12375243.html
Copyright © 2011-2022 走看看