xor связанный список поменять местами 2 узла C

Я пытаюсь поменять местами 2 узла со связанным списком XOR

моя структура:

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 просто выполняет XOR на 2 t_node*.

Для теста я составил список, который выглядит так: 1-2-3-4

После вызова этой функции результат будет таким: 1 - 2 - 2 - 1

Но я хочу иметь: 1 - 3 - 2 - 4

Спасибо!


person Epitouille    schedule 12.03.2014    source источник
comment
Каково возвращаемое значение xor_node?   -  person merlin2011    schedule 13.03.2014
comment
a t_node* : pastie.org/8912914   -  person Epitouille    schedule 13.03.2014


Ответы (1)


я понял

Хитрость заключается в следующем:

для получения следующего из a: XOR(a->ptr, x), а для предыдущего b - XOR(b->ptr, y)

so

a->ptr = xor_node(xor_node(y, a->ptr), x);
b->ptr = xor_node(xor_node(x, b->ptr), y);
person Epitouille    schedule 13.03.2014