异或链表(英语:XOR linked list)是数据结构里面的一种链式存储结构,可以在降低空间复杂度的情况下达到和双向链表一样的目的,使得在任何一个结点都能方便地访问它的前驱结点和后继结点。
普通双向链表的每个结点有三个域 ,分别存储着前一个结点的地址、后一个点的地址,以及数据
... A B C D E ... –> next –> next –> next –> <– prev <– prev <– prev <–
异或链表通过异或操作(这里用⊕表示)把前一个结点的地址和后一个结点的地址变成一个地址
... A B C D E ... <–> A⊕C <-> B⊕D <-> C⊕E <-> link(B) = addr(A)⊕addr(C), link(C) = addr(B)⊕addr(D), …
当从左往右遍历的时候,如果当前结点是C,指针域是内容是B⊕D,通过和前一个结点B的地址做异或操作就能得到下一个结点D的地址,如此重复便能遍历整个链表。