2011-12-14 185 views
0

我想用鄰接表來表示一個圖,但是我遇到了指針問題。鏈接列表創建

typedef struct vertex{ 
    int num; 
    struct vertex *next; 
} Vertex; 

Vertex *adj[10]; 

void build(){ 
    Vertex *v=NULL; 
    Vertex *t=NULL; 
    v = malloc(1*sizeof(*v)); 

    v->num = 1; 
    adj[0] = v; //NODE with value 1 
    t = v; 

    v = malloc(1*sizeof(*v)); 
    v->num = 1; 
    t->next = v; // ANOTHER NODE but it should be the SAME NODE with the above one 
    t = v; 

    //v = malloc(1*sizeof(*v)); 
    //v->num = 1; 
    //t->next = adj[0]; // causes infinite loop... 
    //t = v; 

    v = malloc(1*sizeof(*v)); 
    v->num = 2; 
    t->next = v; 
    t = v; 
} 

我想要構建的其實很簡單。 1 - > 1,2。但是我寫的代碼沒有工作。可能是什麼問題呢?

編輯:好吧,我糾正了NULL。 期望的輸出是1 - >> 1,2。一個圖形有2個節點1指向自己和值爲2的下一個節點。 我的問題是當我得到列表1 - > 1,2後創建圖形;它看起來像我有3個不同的節點。我的意思是後來當我用1到3改變節點的值時,我得到了3 - > 1,2,但由於我只有2個節點,所以在我做出改變後,所需的輸出應該是3 - > 3,2。

+0

將t設置爲v後,您將t設置爲NULL。 – wildplasser 2011-12-14 11:56:29

+0

您不應該完全改變問題的基礎。接受答案並提交另一個後續問題。然後添加完整的(儘管不超過必要的)代碼。 – moooeeeep 2011-12-14 12:36:32

回答

1

你在幾個地方搗毀t。特別是對於t = v;,您沒有其他地方的原始價值。

2
t = NULL;  
v = malloc(1*sizeof(*v));  
v->num = 2;  
t->next = v; //This is basically dereferencing a NULL pointer 

你將它設置爲NULL引起未定義行爲後提領t

另外,您應該告訴我們:
預期產量是多少?
你得到的輸出是什麼?

沒有這些信息,除了向您指出明顯的使用錯誤外,很難判斷您做錯了什麼。