删除异或链接列表中的节点

时间:2019-04-03 20:31:35

标签: algorithm data-structures linked-list

我在C ++中找到了以下代码,这些代码可插入和遍历XOR链接列表。

我们如何删除节点?看起来当我们删除一个节点时,列表中该节点的所有地址都需要更新吗?

还是我的直觉这次是不正确的?

https://en.wikipedia.org/wiki/XOR_linked_list

https://www.geeksforgeeks.org/xor-linked-list-a-memory-efficient-doubly-linked-list-set-1/

https://www.geeksforgeeks.org/xor-linked-list-a-memory-efficient-doubly-linked-list-set-2/

1 个答案:

答案 0 :(得分:0)

不,您不会更新地址的全部,而只是更新相邻的地址。查看示例列表;让我们再扩展两个节点:

z        A         B         C         D         E         F
   <–>  z⊕B  <–>  A⊕C  <->  B⊕D  <->  C⊕E  <->  D⊕F  <->

使用C地址的 only 值是BD的值。如果我们删除C,则只需在下一个值中更改这些值:

B.link = B.link ⊕ C ⊕ D
D.link = D.link ⊕ C ⊕ B

这给了我们

z        A         B         D         E         F
   <–>  z⊕B  <–>  A⊕D  <->  B⊕E  <->  D⊕F  <->

您知道它是如何工作的吗?涉及的工作很少:我们已经将列表遍历到C来查找要删除的项目;我们需要做的就是继续前进(在B上操作),然后再走一步访问D