2015-11-19 81 views
2

爲什麼當我們試圖建立一個單獨的鏈表時,我們在課堂上做出Head NULL,而不是將Head的Head設爲Null。在關於鏈表的函數中,爲什麼我們將節點的下一個爲空並且不使節點爲空?爲什麼我們在單鏈表中使頭部變爲空?

+0

你的問題不太清楚。請解釋一下。 –

+0

爲什麼我們讓Head = Null而不是Head-> next = Null? –

+0

這樣你就可以通過檢查'head == null'來檢查列表是否爲空。如果已經有頭指向的第一個元素,則只能設置「head-> next = null」。 – m69

回答

0

爲了避免浪費。列表節點被設計爲在其中存儲元素。想象一下,如果我們在建議的場景中有一個空列表,其中*表示列表的頭部。我們將從以下開始:

[*???]->NULL 

其中???只是一些未使用元素的虛擬變量。我們已經浪費了列表節點時,我們可以簡單地這樣做:

*NULL 

同樣,如果我們考察一個非空列表,我們可能會與你的情況:

[*123]->[456]->[789]->[???]->NULL 

...當我們可以簡單的有:

[*123]->[456]->[789]->NULL 

你當然可以擴大此當列表大小從0到1重寫這個虛擬變量,但現在提出涉及額外的分支,因此,我們最終得到更加複雜的我障礙和處理開銷。

所以這樣做確實很少,而且很可能會丟失很多東西。

在關於鏈表的函數中,爲什麼我們將 的下一個節點爲空並且不使節點空?

我對此部分不甚瞭解。如果我們談論的是插入一個新的節點列表,例如,我們可能有這樣的:

[new node: 456]->???  [*123]->NULL 

然後,我們讓它指向頭:

[new node: 456]->[*123]->NULL 

...然後使頭指向新節點。

[*456]->[123]->NULL 

所以應該不是通常情況下,您是一個節點的next指針設置爲NULL倍,除非它到這恰好是空的頭,響應刪除尾巴。

相關問題