如何在双向链表 python 列表中实现 pop 函数
How to implement pop function in a doubly linked python list
下面是我正在处理的代码块,它是为学校准备的,所以我不要求答案,只是提供一些指导。已经为此工作了很长一段时间,也许我只是尝试过。有人可以向我解释一下我的方法错误吗?
def pop(self, idx=-1):
"""Deletes and returns the element at idx (which is the last element,
by default)."""
nidx = self._normalize_idx(idx)
if nidx >= len(self):
raise IndexError
n = self.head
for _ in range(self[-1]):
n = n.next
return n
n.prior.next = n.next
n.next.prior = n.prior
self.length -= 1
我认为你的错误都在这几行:
for _ in range(self[-1]):
n = n.next
return n
您用于 range
调用的界限很奇怪。您可能想要迭代 nidx
次,而不是 self[-1]
是什么。
你也可能不想在那个时候 return
,因为 return
停止了 运行 的其余功能。尝试将 return
行移动到取消链接代码下方。
您还需要决定您是否应该 return 创建一个节点(如果您不重置 n.next
和 n.prior
,该节点将有杂散链接)或节点中包含的值。通常链表的节点是不会暴露给外部代码的实现细节,所以你会 return 值。
下面是我正在处理的代码块,它是为学校准备的,所以我不要求答案,只是提供一些指导。已经为此工作了很长一段时间,也许我只是尝试过。有人可以向我解释一下我的方法错误吗?
def pop(self, idx=-1):
"""Deletes and returns the element at idx (which is the last element,
by default)."""
nidx = self._normalize_idx(idx)
if nidx >= len(self):
raise IndexError
n = self.head
for _ in range(self[-1]):
n = n.next
return n
n.prior.next = n.next
n.next.prior = n.prior
self.length -= 1
我认为你的错误都在这几行:
for _ in range(self[-1]):
n = n.next
return n
您用于 range
调用的界限很奇怪。您可能想要迭代 nidx
次,而不是 self[-1]
是什么。
你也可能不想在那个时候 return
,因为 return
停止了 运行 的其余功能。尝试将 return
行移动到取消链接代码下方。
您还需要决定您是否应该 return 创建一个节点(如果您不重置 n.next
和 n.prior
,该节点将有杂散链接)或节点中包含的值。通常链表的节点是不会暴露给外部代码的实现细节,所以你会 return 值。