Algorithm 删除xor链接列表中的节点 我发现C++中的下面代码插入和遍历XOR链表。

Algorithm 删除xor链接列表中的节点 我发现C++中的下面代码插入和遍历XOR链表。,algorithm,data-structures,linked-list,Algorithm,Data Structures,Linked List,如何删除节点?当我们删除一个节点时,列表中节点的所有地址都需要更新吗 还是这次我的直觉不正确 不,您不会更新所有地址,只更新相邻的地址。看看示例列表;让我们再扩展两个节点: z A B C D E F <–> z⊕B <–> A⊕C <-> B⊕D <-> C⊕E <-> D⊕F <-> 这给了我们

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

还是这次我的直觉不正确

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

z        A         B         C         D         E         F
   <–>  z⊕B  <–>  A⊕C  <->  B⊕D  <->  C⊕E  <->  D⊕F  <->
这给了我们

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

你知道这是怎么回事吗?所涉及的额外工作非常少:我们已经遍历列表到
C
,找到要删除的项;我们所需要做的就是在移动时保持后面的指针(在
B
上操作),然后再采取一个步骤访问
D

注意,这仅仅是在每个节点中交换一个字的内存,而每个节点遍历的代价是一个额外的机器操作。仔细查看数据对象的大小、列表的大小以及查询的配置文件。额外的内存字是否会对应用程序造成足够的伤害,从而导致访问时间和维护时间变慢?我不明白为什么它不会引起连锁反应。如果B、D的地址改变。A的地址取决于B,E的地址取决于D。所以它也变了?我想我知道了。它是一个⊕D etc是正在存储的ptr。
z        A         B         D         E         F
   <–>  z⊕B  <–>  A⊕D  <->  B⊕E  <->  D⊕F  <->