我在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/
答案 0 :(得分:0)
不,您不会更新地址的全部,而只是更新相邻的地址。查看示例列表;让我们再扩展两个节点:
z A B C D E F
<–> z⊕B <–> A⊕C <-> B⊕D <-> C⊕E <-> D⊕F <->
使用C
地址的 only 值是B
和D
的值。如果我们删除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
。