簡體   English   中英

c ++附加到鏈接列表

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

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