2014-03-12 71 views
0

我想換2個節點與XOR鏈表XOR鏈表掉2個節點C

我的結構:

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 *。

用於測試,我做了一個看起來像列表:2 - - 2 - 1

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

調用此函數的結果是等之後有:1 - 3 - 2 - 4

謝謝!

+0

什麼是'xor_node'的返回值? – merlin2011

+0

a t_node *:http://pastie.org/8912914 – Epitouille

回答

0

我理解

訣竅是:

用於獲得下一個的是: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);