单链表,为什么列表是空的(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。但显然它是空的。我不知道如何解决这个问题。List为空
您必须记住,函数的参数默认情况下是按值传递的,这意味着参数值是复制的,并且函数只对复制的起作用,而不是原始的
。现在以append
函数为例,当你传递head
参数时,指针被复制到参数中,并且在函数中对head
所做的任何更改都只对该副本进行更改。
要使它工作,你需要传递参数你通过引用改变,如
void append(Node *&head, Node *&last, int data)
现在head
和last
是对原指针变量的引用,对变量的修改是对原变量的修改
参数head
和last
是按值传递的,所以它们在函数append
内部的变化与外部变量无关,它们是独立的
您需要通过引用或指针的指针传递它,例如:
void append(Node *&head, Node *&last, int data) {
在函数中:append(Node *head, Node *tail, int data)
你应该通过引用传递head
和tail
。在您的方法中,当您分配head = newNode
时,它被分配给head
的本地副本,而不是您通过的head
。
传递头和最后一个变量的地址,它应该可以工作。
append(&head, &last, 53);
和追加函数的变化如下
void append(Node **head, Node **last, int data)
相关文章:
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 检查字符串是否"null" C++
- fopen 在 gdb 中返回 NULL
- what(): basic_string::_M_construct null not valid
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 为什么要从main()返回NULL?
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 无法在我的链接列表中插入项目,head始终为NULL
- 每次在链表中调用insert_node()函数时,Head都被赋值为Null
- 将 head 设置为 NULL ('NULL' : 未声明的标识符)
- 单链表,为什么列表是空的(head == NULL)