【问题标题】:How can I add the second item in the linked list without overwriting the first one?如何在不覆盖第一项的情况下在链接列表中添加第二项?
【发布时间】:2020-07-10 13:57:36
【问题描述】:

我在 Python 中实现了一个链表。第一项被正确插入。但是第二个在头节点中覆盖它。之后它就可以正常工作了。

class Node:
def __init__(self):
    self.data = None
    self.next = None

class LinkedList:
    def __init__(self):
        self.head = Node()
        self.iterator = self.head

    def isEmpty(self):
        if self.head.data is None:
            return True

    def insert(self, value):
        if self.isEmpty():
            self.head.data = value

        else:
            while self.iterator.next is not None:
                self.iterator = self.iterator.next
            self.iterator.next = Node()
            self.iterator.data = value
            self.iterator = self.head

    def __str__(self):
        l = []
        while self.iterator.next is not None:
            l.append(self.iterator.data)
            self.iterator = self.iterator.next
        self.iterator = self.head
        return str(l)


t = LinkedList()
t.insert(2)
t.insert(4)
t.insert(8)
t.insert(6)
t.insert(10)
t.insert(12)
print(t)

同样在 str 方法中,如果 Head 是唯一的节点,我该如何打印数据。 (由于 Next of Head 为 None,它不会进入 while 循环。)

【问题讨论】:

  • 你真的不应该使用self.iterator。请改用局部变量。检查它的节点是None 来决定是否插入它。不是它的nextNone

标签: python pointers data-structures linked-list


【解决方案1】:

在这里,您似乎覆盖了 self.iterator 的数据。相反,您应该将数据设置为您创建的新节点:

self.iterator.data = value

固定代码:

class LinkedList:
    def __init__(self):
        self.head = Node()
        self.iterator = self.head

    def isEmpty(self):
        if self.head.data is None:
            return True

    def insert(self, value):
        if self.isEmpty():
            self.head.data = value

        else:
            while self.iterator.next is not None:
                self.iterator = self.iterator.next
            new_node = Node()
            new_node.data = value
            self.iterator.next = new_node
            self.iterator = self.head

【讨论】:

    【解决方案2】:

    在方法 insert 的 if 语句中添加 self.iterator.next = Node() 为我解决了这个问题:

    class Node:
        def __init__(self):
            self.data = None
            self.next = None
    
    
    class LinkedList:
        def __init__(self):
            self.head = Node()
            self.iterator = self.head
    
        def isEmpty(self):
            if self.head.data is None:
                return True
    
        def insert(self, value):
            if self.isEmpty():
                self.head.data = value
                self.iterator.next = Node()
    
            else:
                while self.iterator.next is not None:
                    self.iterator = self.iterator.next
                self.iterator.next = Node()
                self.iterator.data = value
                self.iterator = self.head
    
        def __str__(self):
            l = []
            while self.iterator.next is not None:
                l.append(self.iterator.data)
                self.iterator = self.iterator.next
            self.iterator = self.head
            return str(l)
    

    输出:

    [2, 4, 8, 6, 10, 12]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2023-02-09
      • 2022-12-18
      • 1970-01-01
      相关资源
      最近更新 更多