【发布时间】:2020-02-06 04:32:48
【问题描述】:
给定一个单链表,我试图在整个列表中一次反转 k 个节点。 所以,如果 k = 2,1 -> 2 -> 3 -> 4 -> 5 -> 6 将变成 2 -> 1 -> 4 -> 3 -> 6 - > 5。假设 k 始终是列表长度的一个因子(列表长度可被 k 整除)。
我正在尝试使用迭代方法而不是递归方法来解决这个问题。我正在尝试将列表解析为 k 个节点的集合,并将它们分别反转到列表的末尾。这是我的代码
def reverseList(A, B): # param A : head node of linked list, param B : integer, return the head node in the list
if B < 2:
return A
dummy = ListNode('dummy')
dummy.next = A
prev, behind = dummy, A
while behind:
ahead = behind
for i in range(B-1):
ahead = ahead.next
new_behind = reverse_list(behind, ahead)
prev.next = ahead
behind.next = new_behind
behind = behind.next
return dummy.next
reverse_list函数将k个集合的开始到结束节点的列表反转,返回新的k个节点集合开始处的节点(新的开始节点)
def reverse_list(start, end):
prev, curr = None, start
while prev is not end:
next = curr.next
curr.next = prev
prev = curr
curr = next
return curr
ListNode类的定义
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
当给出值 A = [ 6 -> 10 -> 0 -> 3 -> 4 -> 8 ] 和 B = 3 时,输出为 8 -> 4 -> 3。我到底错过了什么或俯瞰?非常感谢任何帮助。
【问题讨论】:
标签: python linked-list singly-linked-list