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

      

  • 相关阅读:
    04-增删改查
    03-编写dao实现类方式
    02-基于注解的入门案例
    .net core api 图片上传与加载
    笔记一、数据库初始化 约定
    .net core MVC中级教程(四)
    .net core MVC中级教程(三)
    Windows 盘符映射
    c# 队列和堆栈
    isValidNode
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/12375243.html
Copyright © 2011-2022 走看看