【发布时间】:2021-10-02 20:44:44
【问题描述】:
我无法将之前的列表与当前的反向列表连接起来。问题如下……
给定一个 LinkedList 的头部和一个数字“k”,从头部开始反转每个“k”大小的子列表。如果最终你得到一个包含少于“k”个元素的子列表,也可以反转它。
我只是想我会保留一个counter,它总是会更新以反转从列表的head 开始的最大 k 大小的 sub_list。找到end 应该在的位置,并让start 指向列表的开头。
为了反转任何大小小于或等于 k 的列表,我只需检查 end is None 是否。
列表的start 成为列表的末尾,因为end 实际上指向k + 1 节点,所以第一次迭代将k 个节点的第一次反转与列表的其余部分通过start.next = end 连接起来,其中start 指向反向列表的最后一个节点,end 指向另一个列表的开头。
我知道我的问题在于,在第二次迭代期间,当列表反转时,我失去了对之前列表的引用(我们可以将其视为前半部分)。例如,对于我的第一次迭代,列表
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8, k = 3
成为,
3 -> 2 -> 1 -> 4 -> 5 -> 6 -> 7 -> 8
但在第二次迭代之后,我不再拥有前 3 个节点的 sub_list
from __future__ import print_function
class Node:
def __init__(self, value, next=None):
self.value = value
self.next = next
def print_list(self):
temp = self
while temp is not None:
print(temp.value, end=" ")
temp = temp.next
print()
def reverse_every_k_elements(head, k):
start, end = head, head
previous = None
while end is not None:
counter = k
while end is not None and counter > 0:
end = end.next
counter -= 1
sub_list = reverse(start, end)
start.next = end
start = end
if previous:
previous.next = end
else:
previous = end
def reverse(head, stop_node):
previous = None
while head is not stop_node:
_next = head.next
head.next = previous
previous = head
head = _next
return previous
def main():
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = Node(4)
head.next.next.next.next = Node(5)
head.next.next.next.next.next = Node(6)
head.next.next.next.next.next.next = Node(7)
head.next.next.next.next.next.next.next = Node(8)
print("Nodes of original LinkedList are: ", end='')
head.print_list()
result = reverse_every_k_elements(head, 3)
print("Nodes of reversed LinkedList are: ", end='')
result.print_list()
main()
我不知道从这里去哪里。
【问题讨论】:
标签: python reverse singly-linked-list sublist