x.next.prev在链表(数据结构)中意味着什么?

时间:2018-08-15 03:13:36

标签: data-structures linked-list

我知道x.next是x的下一个元素,而x.prev是x的前一个元素。但是x.next.prev或x.prev.next是什么意思?

我希望这里有很多知识渊博的人:-))。 谢谢。

2 个答案:

答案 0 :(得分:2)

“ x.next”是指链接列表中的下一个节点。该节点(与列表中的所有节点一样)具有“下一个”和“上一个”指针。该节点的“上一个”指针指向原始节点。

因此,只要“ x.next”不为空,x.next.previous就是当前节点。

同样,只要“ x.prev”不为空,x.prev.next就是当前节点。

答案 1 :(得分:0)

这些形式很有意义,例如添加和删​​除doubly linked lists的节点,以节省一些措辞。

假设您有一个双向链接列表,如下所示:

假设您正在编写将节点B从其中删除的代码。为此,您首先要使C的“后退”指针指向A而不是B。

C.prev = A

要实现这一目标:

如果您的代码中只有B的句柄,则首先要找到A和C,然后执行相同的操作:

C = B.next
A = B.prev
C.prev = A

或者,没有临时变量:

B.next.prev = B.prev

这实际上是您的 x.next.prev 。稍后将A的前向指针从B指向C时,您将编写B.prev.next = B.next,其中包含第二种形式 x.prev.next

对于双向链表,这不仅在删除中有用,而且在添加新节点中也很有用。查看更多有关该here的伪代码。

还要注意,在上图中的情况下,“不变式” B.next.prev == B不成立。您可以遇到必须处理这种条件违规的代码,例如,在无锁算法中。在那里,在阅读x.next.prev时,您不确定它是否与x相同,并且必须处理不相同的情况。