gpt4 book ai didi

c - 异或链表交换2个节点C

转载 作者:行者123 更新时间:2023-11-30 17:37:32 26 4
gpt4 key购买 nike

我正在尝试用 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* 进行异或运算。

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

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

但是,我想要:1 - 3 - 2 - 4

谢谢!

最佳答案

我明白了

诀窍是:

获取下一个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);

关于c - 异或链表交换2个节点C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com