AttributeError:“LinkedList”对象没有属性“insert_head”

AttributeError: 'LinkedList' object has no attribute 'insert_head'

提问人:Subhadip Guchhait 提问时间:10/22/2023 最后编辑:S.BSubhadip Guchhait 更新时间:10/22/2023 访问量:48

问:

我试图在一个链接列表中的头部插入元素 我不明白我的代码有什么问题。它说:

AttributeError: 'LinkedList' object has no attribute 'insert_head'

这是我的代码:

class LinkedList:
    def _init_(self):
        # Empty LinkedList
        self.head = None
        # no of nodes in the LinkedList
        self.n = 0

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

    def _len_(self):
        return self.n
    
    def insert_head(self,value):
        #new node
        new_Node = Node(value)

        #Create onnection
        new_Node.next = self.head

        #Reasign head
        self.head = new_Node

        #Increment n
        self.n = self.n + 1

L = LinkedList()

L.insert_head(1)

len(L)

输出应为 5

python-3.x 单链接列表 插入

评论

0赞 S.B 10/22/2023
输出应为 。为什么?15
0赞 S.B 10/22/2023
还要更正 和 的 dunders。每边应该有两个。initlen

答:

0赞 S.B 10/22/2023 #1

原因很明显,没有方法。它是在课堂上定义的。LinkedListinsert_headNode

事实上,对象应该是数据的容器和对下一个节点的引用,仅此而已。例如,他们不应该知道链接列表的长度。Node

您可以将代码重构为如下所示:

from __future__ import annotations

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

class LinkedList:
    def __init__(self):
        self.head: Node | None = None
        self.n: int = 0

    def __len__(self):
        return self.n

    def insert_head(self, value):
        new_Node = Node(value)
        new_Node.next = self.head
        self.head = new_Node
        self.n += 1

l = LinkedList()
l.insert_head(20)
print(len(l))  # 1