我接到了学校的作业,这是我的密码:
class Doubly_linked_node():
def __init__(self, val):
self.value = val
self.next = None
self.prev = None
def __repr__(self):
return str(self.value)
class Deque():
def __init__(self):
self.header = Doubly_linked_node(None)
self.tailer = self.header
self.length = 0
def __repr__(self):
string = str(self.header.value)
index = self.header
while not (index.next is None):
string+=" " + str(index.next.value)
index = index.next
return string
def head_insert(self, item):
new = Doubly_linked_node(item)
new.next=self.header
self.header.prev=new
self.header=new
self.length+=1
if self.tailer.value==None:
self.tailer = self.header
def tail_insert(self, item):
new = Doubly_linked_node(item)
new.prev=self.tailer
self.tailer.next=new
self.tailer=new
self.length+=1
if self.header.value==None:
self.header = self.tailer
它构建了一个堆栈,允许您添加和删除头部或尾部的项(我没有包含所有代码,只包含重要的内容)。你知道吗
当我初始化一个对象时,如果我返回self.next
,它打印None
,但是如果我返回self.prev
,它什么也不打印,只是跳过,我不明白为什么,因为它们的定义和你看到的完全一样,如果我只插入头部几次,例如for i in range(1,5): D.head_insert(i)
,然后我打印D
,它打印5 4 3 2 1 None
,但是如果我插入尾部,例如for i in range(1,5): D.tail_insert(i)
,然后打印D
,它打印1 2 3 4 5"
,就像没有None
一样。为什么?你知道吗
我包括了一张图片:
按照Günther的建议,我将
__repr__
修改为:这确实解决了问题,但这是我见过的最丑陋的解决办法。你知道吗
有人知道更好的方法吗?你知道吗
请记住,您创建的
Deque
不是空的。您正在用值为None
您正在交换
value
和Node对象。当你检查if self.tailer.value==None:
时,这可能不是你的意思第2点之后是对空Deque的特殊处理,其中header和tailer是
None
如果我要实现
Deque
,我的想法是这样的。我稍微改变了__repr__
的返回值。你知道吗下面是一个更好的
__repr__
方法的问题。用__iter__
方法扩展Deque
类。因此,您可以迭代Deque
,这很好,例如:基于此,
__repr__
方法是简单的。以下是全部变化:相关问题 更多 >
编程相关推荐