分割链表-链表725

Python

没看答案

  1. 首先遍历链表,将所有值存入到数组ls中;
  2. 声明新ls2数组,用于存储将ls按题目要求分好组后的结果;
  3. 定义一个可以将数组转化成链表的函数;
  4. 利用步骤3定义的函数,将ls2的每个元素转化成链表,即可得到题目要求的返回数组。
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def splitListToParts(self, root, k):
        curr = root
        ls = []
        ls2 = []
        while(curr):
            ls.append(curr.val)
            curr = curr.next
        length = len(ls)
        a, b = divmod(length, k)
		# 按题目要求分组
        for i in range(k):
            if b != 0:
                ls1 = []
                for j in range(a+1):
                    ls1.append(ls[0])
                    ls.pop(0)
                ls2.append(ls1)
                b -= 1
            else:
                ls1 = []
                for j in range(a):
                    ls1.append(ls[0])
                    ls.pop(0)
                ls2.append(ls1)
        
        for i in range(len(ls2)):
            ls2[i] = self.arraytolinkedlist(ls2[i])
        
        return ls2
        
	# 将数组转化成链表
    def arraytolinkedlist(self, array):
        a = len(array)
        curr = head = ListNode(100)
        for i in range(a):
            curr.next = ListNode(array[i])
            curr = curr.next
        return head.next

复杂度分析:

  • 时间复杂度:O(n),n为链表结点个数。
  • 空间复杂度:O(n),n同上,主要为数组占用的空间。

猜你喜欢

转载自blog.csdn.net/VaccyZhu/article/details/113811206
今日推荐