我的链表有什么问题?



我试图在另一个程序中为节点创建一个类(它应该是一个队列系统)到import。我知道另一个程序工作得很好,因为它在import使用相同函数名称(即基于python常规list)的另一种类型的队列时工作。然而,使用这种队列类型,我似乎永远无法让它工作。我确信我的代码有很多问题(因为我一直得到各种各样的错误信息),我想对我应该改变的一些输入。

下面是类的代码:
class Node():
    def __init__(self, v=None, n=None):
        self.item=v
        self.next=n
    lastnode=__init__
    def put(self, v):
        Node.lastnode.next=self
        self.item=v
        self.next=None
        Node.lastnode=Node.lastnode.next
    def get(self):
        if Node.isempty(self):
            return None
        out=Node.__init__.next
        Node.__init__.next=out.next
        out.next=None
        return ut.item
    def isempty(self):
        if Node.lastnode==Node.__init__:
            return True
        else:
            return False

put函数的作用是将新项目/节点放到队列的最后。

get函数的作用是从队列中删除第一个节点,return删除它的项。

isempty函数用于检查队列是否为空。

请给我一些批评

您的主要问题是您试图使用单个类来解决实际上需要两个类的问题。链表包含两种类型的项:节点和列表结构本身。一个节点只"知道"两件事:它所包含的数据和它所链接的下一个节点的标识。列表对象负责管理对一组链接节点的访问。试图将这两个角色组合在一个类中,就不可能实现列表。例如,考虑一下你的类如何管理多个节点。看起来,您正在尝试通过为列表级数据(例如头节点的标识)使用类属性来绕过这些困难,但是即使可以使其工作,您一次也只能处理一个列表实例。

除此之外,你的代码还有一些基本的语法问题。例如,行lastnode=__init__不调用__init__;调用语法应该是lastnode=__init__(),但是你不能在类定义的主体中这样做。

这里有一个你可以学习的简单实现:

class Node(object):
    def __init__(self, value=None, next=None):
        self.value = value
        self.next = next
class List(object):
    def __init__(self):
        self.head = None
    def put(self, value):
        new = Node(value)
        new.next = self.head
        self.head = new
    def get(self):
        if self.is_empty():
            return None
        old = self.head
        self.head = old.next
        return old.value
    def is_empty(self):
        return self.head is None

相关内容

  • 没有找到相关文章

最新更新