2016-03-20 32 views
0
1 struct node 
2 { 
3  int data; 
4  struct node *next; 
5 }*head; 
6 
7 void append(int num) 
8 { 
9  struct node *temp,*right; 
10 temp= (struct node *)malloc(sizeof(struct node)); 
11 temp->data=num; 
12 right=(struct node *)head; 
13 while(right->next != NULL) 
14  right=right->next; 
15 right->next =temp; 
16 right=temp; 
17 right->next=NULL; 
18 } 

我需要幫助理解此代碼的某些部分。鏈接列表理解語法

1)代碼應該做什麼?

2)第5行是什麼?

}*head; 

林看慣了這個,當我讓我的結構:

struct node 
{ 
    int data; 
    struct node *next; 
}; 

3)什麼是應該做的第12行?不知道這個語法

right=(struct node *)head; 

我的猜測是,它需要什麼樣的頭指向並指出它的權利。那麼,爲什麼不只是這樣做:right = head;

謝謝!

+0

Fyi,*代碼中的這兩個*都不需要。我常常被人們在代碼中輸入不必要的東西的傾向所迷惑。編寫有效的代碼已經足夠了;用不必要的垃圾亂丟垃圾並不會讓它變得更好。 – WhozCraig

+0

阿門,對此:D – Hyune

+0

而且我要做到這一點,它會喜歡[**這樣的**](http://pastebin.com/FL6wrF9Z)。對於不同的人,我想是不同的筆畫。 – WhozCraig

回答

0

所以,這可能不是最完整的答案: 關於}*head;,這只是立即聲明結構的頭部,一個名爲head的實例,它本身是一個指向結構實例的指針。然後,在第12行,用right = (struct node *)head,指針正在投射。也許這是爲了安全或清晰;我不確定。

0

第5行聲明瞭一個全局變量head,它是一個指向之前聲明的結構類型的指針。

12行分配headright。演員陣容不是必需的。

該函數分配一個新節點,給data成員num的值,到列表的末尾並追加它。

15 right->next =temp; 
16 right=temp; 
17 right->next=NULL; 

第15行附加新節點。變量right現在可用並且temp已分配給它。現在,第16行將列表最後一個成員的next成員設置爲空。最後兩行可以簡寫爲temp->next= NULL;

+0

謝謝Paul,這很有道理。 – Hyune

+0

我明白從第13-14行開始,我們試圖到達鏈表的末尾,但第15-17行的重點是什麼? 我不明白你爲什麼會先將temp追加到right-> next,然後將temp追加到right之後,然後使right-> next = NULL。 難道你不能刪除第15行,因爲它是多餘的? – Hyune

+0

對不起,nvm我明白了。 第15行將溫度附加到列表的末尾 第16行使正確的點指向temp 第17行使temp指向null – Hyune