簡體   English   中英

在 Python 中反轉鏈表時的無限循環

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM