[英]Python - Linked List node comparision requires additional dereferencing
我正在使用Python 3.6.3。 我試圖用Python編寫一個簡單的鏈表。 這是我的代碼:
class Node(object):
"""Represents a node within a linked list"""
def __init__(self, data, next=None):
self.stuff = data
self.next = next
def __str__(self):
return str(self.stuff)
class LinkedList(object):
def __init__(self):
self.head = None
self.size=0
def append(self, data):
if not self.head:
self.head = Node(data)
return
else:
n=self.head
while n.next:
n = n.next
new_node = Node(data)
n.next = new_node
return
def insertAfter(self, data, newNode):
if not self.head:
return
else:
n=self.head
while n and n.stuff != data:
n = n.next
if not n:
return
else:
newNode.next = n.next
n.next = newNode
return
def printlist(self):
if not self.head:
print("List is empty")
return
else:
n = self.head
while n:
print(str(n))
n = n.next
return
ll = LinkedList()
ll.append(Node("1"))
ll.append(Node("2"))
ll.append(Node("3"))
ll.insertAfter("2", Node("2.5"))
ll.printlist()
我希望它能打印:
1
2
2.5
3
但是,它打印:
1
2
3
調試后,我意識到在insertAfter方法中更改此行:
while n and n.stuff != data:
至:
while n and n.stuff.stuff != data:
打印預期的輸出。 我不明白為什么要這么做。 請幫忙。 謝謝
問題是您沒有在LinkedList
添加1、2、3,而是讓它創建了一個用於包裝每個Node
。 您將添加一個stuff
變量為1、2和3的Node
。當您調用append方法添加每個Node
,它們會被append
方法包裹在另一個Node
。 因此,您需要調用Node.stuff.stuff
來訪問存儲的實際元素。
查看您的append
方法實際上在做什么。 它接受一些參數data
,然后創建一個Node
與任一行self.head = Node(data)
或線路new_node = Node(data)
,這取決於如果LinkedList
已經具有頭部Node
或沒有。
將ll.append(Node("1"))
更改為ll.append("1")
。 或者,更改您的append方法以假定它正在傳遞給Node對象。 第一種解決方案更為可取,因為Node
類在LinkedList
類的上下文之外幾乎沒有用處,並且除非始終用Nodes
填充,否則LinkedList
不起作用。 使LinkedList
類的用戶必須每次創建一個Node
似乎是一項額外的工作。
編輯:也是您將數字作為字符串傳遞的原因是什么? 除非您特別希望它們是字符串,否則不需要在引號中加上1、2、2.5和3,但是如果是這樣,為什么呢?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.