xor链表交换2个节点C.

时间:2014-03-12 23:43:58

标签: c linked-list swap xor

我试图用XOR链接列表交换2个节点

我的结构:

typedef struct s_node
{
    struct s_node *ptr;
    int data;
} t_node;

和我的功能(我要交换x和y) a是x的前缀,而下一个是

void swap_node(t_node *a, t_node *x, t_node *y, t_node *b)
{
   //Swapping
   x->ptr = xor_node(y, b);
   y->ptr = xor_node(x, a);

   //Update
   a->ptr = xor_node(xor_node(y, a->ptr), y);
   b->ptr = xor_node(xor_node(x, b->ptr), x);
}

xor_node只在2 t_node *上进行XOR。

为了测试,我制作了一个如下所示的列表:1 - 2 - 3 - 4

调用此函数后,结果如下:1 - 2 - 2 - 1

但是,我希望:1 - 3 - 2 - 4

谢谢!

1 个答案:

答案 0 :(得分:0)

我明白了

诀窍是:

获得下一个是:XOR(a-> ptr,x),而b的prev是XOR(b-> ptr,y)

所以

a->ptr = xor_node(xor_node(y, a->ptr), x);
b->ptr = xor_node(xor_node(x, b->ptr), y);