簡體   English   中英

Python-鏈表節點比較需要附加解引用

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

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