【问题标题】:xor linked list swap 2 nodes Cxor 链表交换 2 个节点 C
【发布时间】:2014-04-17 10:56:46
【问题描述】:

我正在尝试用 XOR 链表交换 2 个节点

我的结构:

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

和我的函数(我想交换 x 和 y) a 是 x 的前一个,b 是 y 的下一个

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

谢谢!

【问题讨论】:

标签: c linked-list swap xor


【解决方案1】:

我明白了

诀窍是:

对于获取 a 的下一个是:XOR(a->ptr, x) 并且对于 b 的前一个是 XOR(b->ptr, y)

所以

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2017-12-07
    相关资源
    最近更新 更多