Python
没看答案
- 首先遍历链表,将所有值存入到数组ls中;
- 声明新ls2数组,用于存储将ls按题目要求分好组后的结果;
- 定义一个可以将数组转化成链表的函数;
- 利用步骤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同上,主要为数组占用的空间。