zoukankan      html  css  js  c++  java
  • Python解Leetcode: 725. Split Linked List in Parts

    • 题目描述:给定一个单链表,写一个函数把它分成k个单链表。分割成的k个单链表中,两两之间长度差不超过1,允许为空。分成的k个链表中,顺序要和原先的保持一致,比如说每个单链表有3个结点,则第一个单链表的结点为输入链表的前三个结点,依次类推。

    • 思路:

    1. 第一次遍历单链表,求出链表的长度length;
    2. 求出平均分成的k个链表中,每个的结点avg,以及还多余的结点rem;
    3. 第二次遍历输入链表,如果达到avg,且rem存在值,则把本次遍历的结果赋值给结果数组;
    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def splitListToParts(self, root, k):
            """
            :type root: ListNode
            :type k: int
            :rtype: List[ListNode]
            """
            ret = [None] * k  # 结果
            length, move = 0, root
            while move:
                length += 1
                move = move.next
            avg, rem = length / k, length % k
            move, indexs = root, 0  # 结果数组索引
            while move:
                tmp = move
                pre = ListNode(0)  # 当前结点的前一个结点
                pre.next = move
                num = 0
                while num < avg:  # 平均分给每个k的结点数目
                    pre, move = pre.next, move.next
                    num += 1
                if rem:  # 平分之后还应该分给前rem个链表每个一个结点
                    pre, move = pre.next, move.next
                    rem -= 1
                pre.next = None
                ret[indexs] = tmp
                indexs += 1
            return ret
    
  • 相关阅读:
    水库采样算法
    在Windows的控制台和Linux的终端中显示加载进度
    如何在普通用户权限cmd怎么使用命令行变为管理员权限
    MySql命令行无法显示中文
    MySql精简
    C语言中的数据类型转换函数
    关于C语言命令行参数问题
    postgres 基本操作
    简单的实现HTTP密码验证登陆
    filebeat+logstash配置
  • 原文地址:https://www.cnblogs.com/qiaojushuang/p/7944618.html
Copyright © 2011-2022 走看看