实现XOR链表。大小1或2

时间:2013-03-01 15:33:47

标签: c linked-list xor-linkedlist

假设这是我的XOR链表结构...

struct xList {
    int data;
    xList* xor;
}

如果xor链表的大小为1或2 xor应包含哪些内容?

2 个答案:

答案 0 :(得分:2)

  

如果xor链表的大小为1或2,xor应该包含什么?

它应该包含prev ^ next,其中prev是指向前一个元素的指针,next是指向下一个元素的指针,^是XOR运算符。列表中的第一个元素显然对前一个项目有nil,而最后一个项目对最后一个项目有nil,因此您可以获得nil ^ nextprev ^ nil这些元素分别是。在大小为1的列表中,之前没有下一个元素,因此您可以找出您在xor字段中存储的内容。

使用xor链表的想法是你必须知道列表中前一个或下一个元素的地址,以便确定下一个或前一个元素。如果您在列表中进行迭代,那就没有问题,因为这就是您使用链接列表的内容,它可能是一个有用的优化。例如,如果您从头到尾迭代,则从指向列表中第一个元素的指针开始。前一个元素是nil,因此要获取您计算的下一个元素:next = prev ^ xor。在移动到下一个元素之前,您还必须记住指向当前元素的指针,以便您可以使用它来获取以下元素。

答案 1 :(得分:0)

您在xorlink指针中存储(上一个^ next)。

考虑

struct xList 
{
    int data;
    xList* xorlink;
}

A - > B - > C - > d

你从头开始。你知道head没有前一个 - 所以xorlink将指向B节点。保存当前指针(A)并移至下一个(B)。 你做(A ^ B-> xorlink)得到指向C的指针。(B ^ C-> xorlink)会给你指向D的指针。依此类推

反向遍历也类似。

无论如何,你的问题的答案

  1. 如果大小为1,则第一个节点的xorlink应包含NULL。
  2. 如果大小为2,则第一个节点的xorlink应包含指向第二个节点的指针。第二个节点的xorlink应包含指向第一个节点的指针。