c - 链表在C中插入结束节点
问题描述
我目前正在学习 C 中的链表,并尝试编写一个函数以在末尾插入一个节点,然后打印所有数据。
起初我的功能不起作用(只打印了 1 2)
struct node {
int data;
struct node *link;
};
void add_end(struct node *head, int a){
struct node *current, *temp;
current = head;
temp = (struct node*)malloc(sizeof(struct node));
temp->data = a;
temp->link = NULL;
while(current != NULL){
current = current->link;
}
current = temp;
};
int main()
{
struct node *head;
head = (struct node *)malloc(sizeof(struct node));
head->data = 1;
head->link = NULL;
struct node *current;
current = (struct node *)malloc(sizeof(struct node));
current->data = 2;
current->link = NULL;
head->link = current;
add_end(head, 3);
current = head;
while(current != NULL){
printf("%d\n", current-> data);
current = current->link;
}
return 0;
}
修复一段时间后,它起作用了(打印了 1 2 3)
void add_end(struct node *head, int a){
struct node *current, *temp;
current = head;
temp = (struct node*)malloc(sizeof(struct node));
temp->data = a;
temp->link = NULL;
while(current->link != NULL){
current = current->link;
}
current->link = temp;
};
谁能告诉我为什么第一个不起作用。我认为它们是相同的,因为在第一个版本中:current 是最后一个节点的链接,它是下一个节点的地址(null),而在第二个版本中:current->link 是最后一个节点的链接,它也是下一个节点的地址(null)。
解决方案
一次current
是NULL
您已经传递了列表中的最后一个节点,并且current
是一个NULL
指针。
分配给它不会将节点添加到列表中,它只会重新分配current
不再是NULL
指针,但最后一个节点link
不会被修改。
使用第二个函数,您可以在列表中找到实际的最后一个节点,并将新节点附加到末尾。
推荐阅读
- powershell - 已删除文件但未删除子文件夹
- flutter - 无法在 VSCode 中删除 Flutter 的可视化调试
- node.js - Nodejs 无法响应整个对象数组。只响应第一个元素
- javascript - 试图在 JavaScript 中用红色突出显示一个单词
- javascript - 反应自定义滑块 - 在滑块上显示气泡值
- python - 在 Windows 上 pip 安装 tensorflow 时出错
- activemq-artemis - ActiveMQ Artemis:生产者失败并出现 JMSException AMQ219016
- simplify - 从 scorm 1.2 连接到 lms
- c++ - Cpp 表达式没有被执行
- amazon-web-services - AWS Step Functions 和 Fargate 任务:容器运行时错误不会导致管道失败