如何在双向链表 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.nextn.prior,该节点将有杂散链接)或节点中包含的值。通常链表的节点是不会暴露给外部代码的实现细节,所以你会 return 值。