2013-10-20 44 views
-1

在基本的鏈表程序,這通常我實現它:鏈表箭頭操作

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

int main() { 
    struct node * head = malloc(sizeof(node)*3); //for 3 nodes 
    head->info = 1; 
    head->next->info = 2; 
    head->next->next->info = 3; 
    //more code 
} 

現在,打印的第二個節點的內容,我用以下語句:

cout<<head->next->info; 

我的問題是,而不是使用上面的語句,可以在下面的使用:

cout<<head[1]->info; 
+0

'我通常執行它'。你永遠不應該實現它。你應該使用'std :: list'。 –

+1

順便說一下,你的代碼是完全錯誤的 - 你的'next'指針都是未初始化的。無論如何,鏈接列表不應該是連續的元素塊。 –

+0

在上面的實現中,您從未設置過'head-> next'或它的任何子節點的值。當您試圖解引用未初始化的指針時,這很可能會導致異常。 – Will

回答

1

鏈表意味着有記憶中不連續的元素。格式頭[1]需要連續的元素。

反正在您的示例代碼並不代表而不是使用上面的語句鏈表

2

我的問題是,可以在下面的使用:

cout<<head[1]->info; 

在你的情況,實際上,是的,因爲你的代碼不會創建鏈表,但更像是一個數組。一個數組,其中每個元素顯然應該具有指向下一個元素的指針next,但所有這些指針都是未初始化的。

使用std::list,直到你知道鏈表是​​如何工作的,然後繼續使用它!

+0

我會告訴他/她:**學習**鏈表首先如何工作,然後開始並繼續使用'std :: list'。 – errikos

0

NO.head是一個指針,head [1]表示*(head + 1),但在列表中,每個列表節點並不相鄰。通常情況下,列表不能這樣做,除非您將每個節點放在一起一個與相鄰的地址

PS。對不起我的可憐的英語

+0

在他的「列表」中,每個節點_is_相鄰。 –