XOR linked list 异或链表

异或链表是实现双链表的一种方法,可以降低空间复杂度,每个节点只有一个指针域,用于存放前一个节点地址和后一个节点地址的异或(如果XOR链表只有一个节点,那么这个节点的指针域便是NULL xor NULL =NULL)。

下面的代码实现来XOR链表的插入函数。该插入函数将一个值插入到链表的前端。

代码如下:

struct LNode{
	int data;
	LNode* pnx; // XOR of the address of prev and next node
	LNode(int dat, LNode* ptr = NULL): data(dat), pnx(ptr) {}
};

LNode* XOR(LNode* add1, LNode* add2)
{ // on 64-bit machine, pointer is 64-bit. Conversion of a pointer type to
//   int type, which is 32-bit, is not allowed.
	return (LNode*) ( (long unsigned)add1 ) ^ ( (long unsigned)add2 );
}

void insert(LNode** headref, int data)
{
	// Allocate memory for new node
	LNode* newHead = new LNode(data);
	/* Since new node is being inserted at the begining, npx of new node
	   will always be XOR of current head and NULL */
	newHead->pnx = XOR(NULL, *headref);
	/* If linked list is not empty, then npx of current head node will be XOR
	   of new node and node next to current head */
	if(*headref)
	{
		(*headref)->pnx = OXR(newHead, XOR(NULL, (*headref)->pnx) );
	}
	(*headref) = newHead;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值