[英]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.