[英]c++ Append to linked list
我正在編寫一段代碼將一個節點附加到單鏈表的末尾,但它似乎根本沒有附加任何內容。 誰能讓我知道我做錯了什么?
#include<iostream>
using namespace std;
struct Node{
int val;
Node* next;
Node(int v) : val(v), next(NULL) {}
};
void append(Node &head, int d){
Node n = head;
while(n.next != NULL){
n = *n.next;
}
Node end(d);
n.next = &end;
}
int main(){
Node head(0);
for(int i=1;i<5;i++){
append(head, i);
}
Node n = head;
while(n.next != NULL){ //print the linked list, result is 0
cout << n.val<<" ";
n = *n.next;
}
cout<<n.val<<endl;
return 0;
}
編輯:我改變了append()方法,每次都附加一個動態分配的節點,但它仍然不起作用。
void append(Node &head, int d){
Node n = head;
while(n.next != NULL){
n = *n.next;
}
Node* end = new Node(d);
n.next = end;
}
附加本地對象Node end(d);
到鏈表的末尾。 這個對象在append
存在時被銷毀,最后一個列表元素指向一個不存在的對象。
這個問題有些問題。
你在你的append
函數中復制Node n = head;
這里n = *n.next
。 然后,您最后更改副本而不是原始副本。
您正在堆棧上分配Node end(d)
。 當append
返回時,它超出范圍並被刪除。
你可以修復兩個,
#include<iostream>
#include <memory>
using namespace std;
struct Node{
int val;
std::shared_ptr<Node> next;
Node(int v) : val(v), next(nullptr) {}
};
void append(Node &head, int d){
Node* n = &head;
while(n->next != nullptr){
n = n->next.get();
}
n->next = std::make_shared<Node>(d);
}
int main(){
Node head(0);
for(int i=1;i<5;i++){
append(head, i);
}
Node n = head;
while(n.next != nullptr){
cout << n.val<<" ";
n = *n.next;
}
cout<<n.val<<endl;
return 0;
}
對於編輯過的問題:您正在將 head
復制到n
,然后修改n
。 在你的append
函數結束時, n
被銷毀,但是從未觸及過head
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.