匿名用户
1级
2013-11-22 回答
Node没什么问题,就是变量定义的时候是一个下划线而不是两个
Stack这里有点问题,
(不知道你这里为啥需要做成一个循环的链表,不过不管了)
1. 首先你得定义一个head和一个tail,这样的话才能把tail和head连接形成一个循环
2. 初始化Stack的话把head和tail都设置成None表示这是个空的stack
3. push的话看你喜欢这么写了,比较喜欢的是把push进去的Node作为新的head,然后修改一下self._head为新Node,然后修改新Node的next为老的head,再连接一下Tail和Head便可,这样就省掉一些循环
4. pop的话就加一些判定好了,首先看Head是不是None,如果是就说明Stack是空的。如果发现Tail和Head都是同一个的话就说明Stack里就一项了,提取完Head之后就设置Stack为空吧。然后先提取Head,然后读取Head后面的那一个Node并且设置为新的Head,然后再连接一下Tail和Head便可
5. 附上代码供参考.
class Node:
def __init__(self, newData):
self._data = newData
self._next = None
def getData(self):
return self._data
def getNext(self):
return self._next
def setData(self, newData):
self._data = newData
def setNext(self, newNode):
self._next = newNode
class Stack:
def __init__(self):
self._head = None
self._tail = None
def push(self, data):
print 'Push',data,'into stack'
new = Node(data)
cur = self._head
end = self._tail
if cur is None:
self._head = new
new.setNext(new)
self._tail = new
else:
new.setNext(self._head)
self._head = new
self._tail.setNext(new)
def pop(self):
if self._head is not None:
cur = self._head
print 'pop',cur.getData(),'out of stack'
if cur.getNext() is not cur:
self._head = cur.getNext()
self._tail.setNext(self._head)
else:
self._head = None
self._tail = None
else:
print 'Stack is empty'
my = Stack()
for i in range(5):
my.push(i)
for i in range(6):
my.pop()