我的链表有什么问题?

时间:2014-03-12 16:48:00

标签: python linked-list

我正在尝试为另一个程序中的import节点创建一个类(它被称为队列系统)。我知道其他程序工作正常,因为它在import使用相同函数名的另一种类型的队列(基于Pythons regular 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函数用于检查队列是否为空。

请对此提出一些批评。

1 个答案:

答案 0 :(得分:1)

您的主要问题是您尝试使用单个类来解决真正需要两个类的问题。链接列表涉及两种项目:节点和列表结构本身。只有节点才知道"两件事:它包含的数据和它链接到的下一个节点的标识。列表对象用于管理对一组链接节点的访问。通过尝试将两个角色组合在一个类中,您将无法实现列表。考虑一下,例如,您的类如何管理多个节点。通过使用列表级数据的类属性(例如头节点的标识),你似乎试图解决这些困难,但即使这样做只能使你工作了能够一次处理一个列表实例。

除此之外,您的代码还有一些基本的语法问题。例如,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