【问题标题】:Python - Linked List - AppendPython - 链表 - 追加
【发布时间】:2018-03-28 13:07:29
【问题描述】:

我正在尝试在 python 中学习链接列表我已经获得了链接列表类并要求创建附加方法。

这是提供的代码。

class Node:
    def __init__(self, item, next):
        self.item = item
        self.next = next

class LinkedList:
    def __init__(self):
        self.head = None

    def add(self, item):
        self.head = Node(item, self.head)

    def remove(self):
        if self.is_empty():
            return None
        else:
            item = self.head.item
            self.head = self.head.next
            return item

    def is_empty(self):
        return self.head == None

    def __str__(self):
        tmp_str = ""
        ptr = self.head
        while ptr != None:
            tmp_str += ptr.item + " "
            ptr = ptr.next

        return tmp_str

这是我的追加方法,但它有问题。我知道如果链接列表是空的,我必须创建一个,当里面有元素时问题就开始了。

def append(self, item):
    ptr = self.head
    if ptr:
        while ptr != None:
            ptr = ptr.next
        ptr = Node(item, ptr)
    else:
        self.head = Node(item, self.head)

谁能告诉我我做错了什么?非常感谢任何帮助。

【问题讨论】:

  • ptr不是None的情况下(即链表非空的情况下),找到链表的最后一个节点,则可以做last.next = Node(item, None)
  • 术语 nitpick:append 不是一个类,它是一个函数,是你的LinkedList 类的一个方法
  • @juanpa.arrivillaga 谢谢我修好了

标签: python python-3.x linked-list


【解决方案1】:

进行两次检查 - 第一次检查 self.head 是否已初始化。第二个应该遍历列表,直到找到最后一个节点。确保您没有越界,否则您将无法将最后一个节点链接到 new 最后一个节点。

def append(self, item):
    if not self.head:
        self.head = Node(item, self.head)
    else:
        ptr = self.head
        while ptr.next:                    # traverse until ptr.next is None
            ptr = ptr.next
        ptr.next = Node(item, ptr.next)    # initialise ptr.next

【讨论】:

  • @OmOWalker 差不多。如果您到达ptr 为无的地步,并分配ptr,那并不意味着您正在重新分配尾部的下一个属性!我希望这可以为您解决问题。
  • 是的,我会继续练习 :D。投了你一票,但这说明我名声不大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多