双向链表好在哪

有了 prev 之后,最实在的好处是【0】。

开始练习 →

双向链表的代价是什么

加上 prev 要付的代价是【0】。

开始练习 →

从最后一个往回走一步是谁

运行下面这段程序: class DNode: def __init__(self, name): self.name = name self.next = None self.prev

开始练习 →

把 prev 接上,再从尾巴走回头

补全 link:给已经接好 next 的链补上 prev。 补全后从最后一个一路往回走,输出走到头时那个人的名字。

开始练习 →

从尾巴往前数一遍

补全 count_back:从 tail 出发倒着走完整条链,返回数到几个。

开始练习 →

双向插入:两个方向都要接对

补全 insert_after:把新节点插到 cur 后面,四条指向全部接好。 把「北辰」插到「阿岚」后面之后,输出北辰前面那个人的名字。

开始练习 →

双向删除:不用再记前一个了

补全 unlink:把节点 nd 从双向链上摘掉。因为有 prev,不需要从头遍历找前一个。 摘掉「小满」之后,从最后一个往回走两步,输出走到的那个人的名字——prev 那条没接对就走不到。

开始练习 →

反转链表实际在做什么

把一条链反过来,实际做的是【0】。

开始练习 →

为什么改指向之前要先存住 next

掉头之前必须先用一个变量存住 cur.next,因为【0】。

开始练习 →

反转之后第一个是谁

运行下面这段程序: class Node: def __init__(self, name): self.name = name self.next = None def build(names):

开始练习 →