[英]Infinite loop while reversing a linked list in Python
所以我有这个代码
class Node():
def __init__(self, data):
self.data = data
self.next = None
class LinkedList():
def __init__(self):
self.head = None
self.length = 0
def prepend(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
self.length += 1
def print_list(self):
if self.head == None:
print('Empty')
else:
currentNode = self.head
while currentNode != None:
print(currentNode.data, end = ' ')
currentNode = currentNode.next
def reverse(self):
first = self.head
second = first.next
while second:
temp = second.next
second.next = first
first = second
second = temp
我在前面加上一个 [8,7,11,6,5,10] 的列表。 当我尝试使用 reverse 函数并尝试打印出来时,我得到了 8 和 7 的无限循环。我不知道为什么。 我认为第一个已经指向 self.head,所以当它改变时,self.head 也会改变。 但事实并非如此。 有人可以帮我解决这个问题吗?
您的reverse
方法仅关注前两个元素,并在它们之间设置循环引用。
这是修改后的reverse()
方法,它有效。 (注意reverse()
方法包含一个名为rev_()
的封闭辅助函数,它通过链表递归):
def reverse (self): #------------MODIFIED--------------
def rev_ (head):
rest = head.next
if rest is None:
return head
else:
reversed_rest = rev_(rest)
rest.next = head
head.next = None
return reversed_rest
if self.head is not None:
self.head = rev_(self.head)
测试一下:
my_list = LinkedList()
my_list.print_list()
print()
my_list.reverse()
my_list.print_list()
print()
my_list.prepend(21)
my_list.print_list()
print()
my_list.reverse()
my_list.print_list()
print()
my_list.prepend(22)
my_list.prepend(23)
my_list.print_list()
print()
my_list.reverse()
my_list.print_list()
输出:
Empty
Empty
21
21
23 22 21
21 22 23
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.