算法导论 10.2-8 用一个指针实现双链表

一、题目

说明如何对每个元素仅用一个指针np[x](而不是两个指针next和prev)来实现双链表。假设所有指针值都是k位的整型数,且定义np[x] = next[x] XOR prev[x],即next[x]和prev[x]的k位异或(NIL用0表示)。注意要说明访问表头所需的信息,以及如何实现在该表上的SEARCH、INSERT和DELETE操作。如何在O(1)时间内实现这样的表。


二、思路

np[x] = next[x] XOR prev[x],根据异或的性质,next[x] = np[x] XOR prev[x],prev[x] = next[x] XOR np[x],只要知道这个结点的下一个结点的地址,就能求出它上一个结点的地址,或者,只要知道这个结点上一个结点的位置,就知道求出它的下一个结点的位置

在链表中定义一个头结点,这个结点的位置是已知的,根据上文的结论,就可以依次遍历链表中的每个结点,进行于SEARCH、INSERT和DELETE操作了


三、代码

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值