c++ - 单向链表,为什么链表是空的(head == NULL)?

标签 c++ list c++11 data-structures singly-linked-list

我创建了一个单链表:

#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);
}

当我编译它时,输出是这样的:

List is empty.

但我不知道为什么。 “head”得到一个地址,所以“head”不应该是 NULL。但显然它是 NULL。 我不知道如何解决这个问题。

最佳答案

您必须记住,默认情况下,函数的参数是按值传递的,这意味着参数值是复制的,并且该函数仅适用于拷贝而不适用于原始值。

现在使用 append 函数,当您传递 head 参数时,指针被复制到参数中,并且对 head 所做的任何更改函数内部仅对该拷贝进行复制。

要使其正常工作,您需要通过引用传递您更改的参数,例如

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

现在headlast是对原指针变量的引用,对变量的改变是对原变量的修改。

关于c++ - 单向链表,为什么链表是空的(head == NULL)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640290/

相关文章:

C++11线程id,有更简单的命名约定吗?

c++ - 主流 C++ 编译器中 GC 实现的时间表是什么?

C++:Visual Studio 2013 中奇怪的虚拟成员函数指针

c++ - "Extra Qualification on Member"模板类错误

Java List toArray(T[] a) 实现

Python 编程 : Global name 'is_within' is not defined. 我正在使用列表过滤器

list - 如何阅读这份 list ?

c++ - SQL 控制台应用程序中的 MFC 库

c++ - 对二维数组进行排序

c++ - 为什么下面的非静态数据成员初始化在C++11中是无效的