首先,我确实看过这个:Deleting the last element in my linked list(研究它和我的代码超过一个小时)我似乎无法"得到"此
我想:
这是我的代码:
class Node(object):
def __init__(self, value, nxt):
self.value = value
self.next = nxt
def __repr__(self):
nval = self.next and self.next.value or None
return f"[{self.value}]"#":{repr(nval)}]"
class List(object):
def __init__(self):
self.begin = None
self.end = None
def push(self, obj):
node = Node(obj, None)
if self.begin == None:
self.begin = node
self.end = self.begin
else:
self.end.next = node
self.end = node
def pop(self):
end = self.end
start = self.begin
while start.next is not None:
start = start.next
start.next = None
return end.value
l = List()
l.push("a")
l.push("b")
l.push("c")
l.push("d")
print (l)
print (l.pop())
print ("AND FINALLY:", l)
当我跑步时,我得到:
ABCD
d
最后:ab
当然,我发现我没有在节点上迭代到足以得到" c"节点。我已经玩了很长时间的循环,无法解决这个问题。
答案 0 :(得分:0)
你有条件,同样重要的是缩进错误。您也没有更新self.end
或测试列表中是否只有1个项目,例如:
def pop(self):
end = self.end
start = self.begin
if start == end:
self.begin = self.end = None
return end.value
while start.next is not end:
start = start.next
start.next = None
self.end = start
return end.value
注意:如果列表中没有值,则不会解决该问题。
另请注意:如果__repr__()
课程中没有__str__()
或List
,您将无法获得预期的输出。