使用一个指针实现双向链表

本文探讨了如何在双向链表中利用指针的异或操作实现SEARCH、INSERT和DELETE操作。通过定义 x.np = x.next ^ x.prev,可以简化链表操作。SEARCH操作从表头开始搜索,INSERT操作涉及修改自身及相邻节点的指针,DELETE操作则需要调整删除节点的前后节点指针。这种方法巧妙地用单指针实现了双指针链表的常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法导论10.2-8 假设所有指针的值都可视为K位的整型数,且定义 x.np = x.next ^ x.prev  。注意要说明获取表头所需信息,并说明如何在该表上实现SEARCH,INSERT,DELETE操作。

对^操作,有 x^y^y=x。

表头 head.np = head.prev ^ head.next = NULL ^ head.next. 所以head.np 指向第二个元素。

SEARCH操作:   //先比较前2个元素,再从第三个开始循环

if(head.value == x) return head;

if(head.np.value == x) return head.np;

node = head.np;//指向第二个

node_p = head;//指向第一个

while(node_next = node.np  ^ node_p)   // node.np = node_next ^ node_p  求第三个元素

if(node_next.value == x)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值