1、基础
数学基础: x ^ y ^ y = x ^ ( y ^ y ) = x ^ 0 = x双指针双向链表结点:
struct double_link_list {
struct double_link_list *next;
struct double_link_list *prev;
... value;
} head;
单指针使用的双向链表:
struct double_link_list {
void *np;
... value;
} head;
两链表之间的关系:
head->np = head->next ^ head->prev2、 搜索
我们通常所用的双指针双向链表head的prev为null,因此有
head->np = head->prev ^ head->next = head->next;
这样,我们根据链表的头部就可以获得head->next,即链表的第二个结点地址,这样:
node->next = node->np ^ node->prev; // node->np = node->next ^ node->prev
此处可将node指为head->next,即为head->np,则有ÿ