簡體   English   中英

C++鏈表插入實現

[英]C++ Linked List Insert Implementation

免責聲明:我對編碼有點陌生,這是一個非常簡單的問題,但我在其他任何地方都找不到答案,所以我決定在這里問我的第一個問題,我希望它沒有被問過(如果有,我沒找到)。 我希望這是一個適合我的問題的論壇。

我正在嘗試為我正在學習的課程創建一個鏈接列表。 我正在努力在列表末尾插入一個新值。 這是我的添加/插入方法,我基本上是從我的教科書中偷來的,但我很困惑:

class Node {

public:

    int elem = 0;

    Node* next = NULL;
}; // I'm including the Node class in this question for reference


//Here's the method that confuses me  
void SList::Insert(int key) {                      // add to front of list

  Node* v = new Node;                                // create new node

  v−>elem = e;                                       // store data

  v−>next = head;                                    // head now follows v

  head = v;                                          // v is now the head
}

我想我的問題是這樣的:當 add 方法運行時,它會在每次調用時創建一個新節點 v(至少,我是這么理解的)。 如果多次調用該方法,這是否會創建具有相同名稱(v)的節點類的多個實例,這會導致錯誤嗎?

該代碼確實按預期工作,但我希望有人能花一點時間向我解釋它為什么起作用。 我對 C++ 不是很熟悉,我對 java 更熟悉,所以我猜 C++ 的某些方面我不明白。

首先,這段代碼片段是在我們鏈表的開頭(由頭指針標識)而不是末尾插入一個新節點。 v是一個臨時標識符,用於保存我們的新節點,它尚未附加到我們的列表中。 假設我們的列表最初看起來像這樣:

[head] -> [1,n2] -> [2,n3] -> [4,NULL].

(head 只是節點指針,不是節點)

在這個語句之后v−>elem = e; 我們的新節點為: [v] -> [e,NULL]

v−>next = head; :這一行並不意味着 head 跟隨 v,它只是意味着我們將我們的新節點設置為指向 head 指向的同一節點。 所以現在我們的列表看起來像這樣:

[v] -> [e,n2] -> [1,n2] -> [2,n3] -> [4,NULL]

注意: [head]仍然指向我們的第二個節點[1,n2] ,它現在應該指向我們的第一個新創建的節點,這是通過我們的最后一行head = v; . v現在超出​​范圍,我們的列表如下所示:

[head] -> [e,n2] -> [1,n2] -> [2,n3] -> [4,NULL]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM