簡體   English   中英

單鏈列表,為什么列表為空(head == NULL)?

[英]Singly linked list, why is the list empty (head == NULL)?

我創建了一個單鏈表:

#include <iostream>

using namespace std;

struct Node{
    int data;
    Node *next;
};

bool isEmpty(Node *head){
    if (head == NULL){
        return true;
    }
    else{
        return false;
    }
}

void append(Node *head, Node *last, int data){
    Node *newNode = new Node;
    newNode->data = data;
    newNode->next = NULL;
    if (isEmpty(head)){
        head = newNode;
        last= newNode;
    }
    else{
        last->next = newNode;
        last= newNode;
    }

}

void printList(Node *current){
    if (isEmpty(current)){
        cout << "List is empty." << endl;
    }
    else{
        int i = 1;
        while (current != NULL){
            cout << i << ". Node: " << endl;
            cout << current->data << endl;
            current = current->next;
            i++;
        }
    }
}

void main(){
    Node *head = NULL;
    Node *last = NULL;
    append(head, last, 53);
    append(head, last, 5512);
    append(head, last, 13);
    append(head, last, 522);
    append(head, last, 55);
    printList(head);
}

當我編譯它時,輸出是這樣的:

清單為空。

但是我不知道為什么。 “ head”獲取地址,因此“ head”不應為NULL。 但顯然是NULL。 我不知道如何解決這個問題。

您必須記住,默認情況下,函數的參數是按值傳遞的,這意味着將復制參數值,並且該函數僅適用於副本,而不適用於原始副本。

現在使用append函數,當您傳遞head參數時,指針將被復制到該參數中,並且對該函數內部head所做的任何更改僅會對該副本進行。

為了使其正常工作,您需要傳遞通過引用更改的參數 ,例如

void append(Node *&head, Node *&last, int data)

現在headlast是對原始指針變量的引用,並且對該變量所做的更改是對原始變量的。

參數headlast是通過值傳遞的,因此它們在函數append的更改與外部變量無關,它們是獨立的。

您需要通過引用或指針指針傳遞它,例如:

void append(Node *&head, Node *&last, int data) {

在函數中: append(Node *head, Node *tail, int data)

您應該通過參考傳遞headtail 在您的方法中,當您分配head = newNode會將其分配給head的本地副本,而不是您傳遞的head

傳遞head和last變量的地址,它將有效。

append(&head, &last, 53);

以及添加功能的變化如下

void append(Node **head, Node **last, int data)

暫無
暫無

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

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