调用链表功能

时间:2015-11-21 17:06:36

标签: python class linked-list

我有一个链表的堆栈。当我致电list.push()时,它可以正常工作,但当我在功能init()中执行相同操作时,它什么都不做。可能是什么问题?

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

    def __str__(self):
        return str(self.data)

class linkedList:
    def __init__(self):
        self.head = None
        self.end = None

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

    def push(self, item):
        new_node = Node(item)
        if not self.head:
            self.head = self.end = new_node
        else:
            new_node.nextNode = self.head
            self.head = new_node

#doesnt work
def init():
    list = linkedList()
    list.push("a")

init()
print(list.isEmpty()) #True

#works
list = linkedList()
list.push("a")
print(list.isEmpty()) #False

2 个答案:

答案 0 :(得分:1)

在函数外部,您无法访问在函数内创建的本地对象。返回它使它可用:

def make_list():
    my_list = linkedList()
    my_list.push("a")
    return my_list

my_list = make_list()
print(my_list.isEmpty())

请勿使用名称list作为对象,因为它会遮挡内置list

答案 1 :(得分:-1)

你需要 RETURN 你在函数中创建的对象,因为该对象死了'当函数结束时,所以没有任何对象供你查看。这就是为什么你变空的原因。

这是你如何使它工作:

def make():
    aList = linkedList()
    aList.push("a")
    return aList

然后你将存储从该对象返回的任何内容:

some_list = make() # storing the linkedlist that make() returns into 
                   # variable called 'some_list'
print(some_list.isEmpty()) # True