• 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
    
  • 相关阅读:
    如何让create-react-app锦上添花,满足实际需求?
    《漫画算法》笔记-下篇
    《漫画算法》笔记-上篇
    react + typescript 学习
    node http 模块 常用知识点记录
    vue 相关技术文章集锦
    读后感:数据结构与算法JavaScript描述
    css 揭秘-读书笔记
    vue-textarea 自适应高度
    消除浏览器对input的自动填充
  • 原文地址:https://www.cnblogs.com/qiaojushuang/p/7944618.html
Copyright © 2020-2023  润新知