[英]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.