题目:
给你一个头结点为 head 的单链表和一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。
每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。
这 k 个部分应该按照在链表中出现的顺序排列,并且排在前面的部分的长度应该大于或等于排在后面的长度。
返回一个由上述 k 部分组成的数组。
解答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def splitListToParts(self, head: ListNode, k: int) -> List[ListNode]:
n=0
cur=head
#求当前链表的长度
while cur:
cur=cur.next
n+=1
#前r个链表的长度为q+1,其余链表的长度为q
q,r=n//k,n%k
pre,cur=None,head
res=[]
for _ in range(k):
res.append(cur)
tmp=q+1 if r>0 else q
for _ in range(tmp):
pre = cur
cur = cur.next
if pre:
pre.next = None
if r >0 :
r -= 1
return res