假设这是我的XOR链表结构...
struct xList { int data; xList* xor; }
如果xor链表的大小为1或2 ,xor
应包含哪些内容?
答案 0 :(得分:2)
如果xor链表的大小为1或2,xor应该包含什么?
它应该包含prev ^ next
,其中prev
是指向前一个元素的指针,next
是指向下一个元素的指针,^
是XOR运算符。列表中的第一个元素显然对前一个项目有nil
,而最后一个项目对最后一个项目有nil
,因此您可以获得nil ^ next
和prev ^ 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的指针。依此类推
反向遍历也类似。
无论如何,你的问题的答案