c - 显示功能不执行,头部值不断设置为空,因此显示功能保持打印为空
问题描述
#include <stdlib.h>
#include <stdio.h>
struct node *create(int num);
void display(void);
//链表节点创建
struct node
{
int data ;
struct node *next;
};
struct node *head = NULL;
struct node *newnode;
struct node *temp;
int main()
{
int num;
printf("enter no of nodes\n");
scanf("%d",&num);
for(int i = 1 ;i<=num;i++)
{enter code here
create(num);
}
display();
return 0 ;
}
// 这会正确执行
struct node *create(int num)
{
newnode = (struct node *)malloc(sizeof (struct node));
printf("enter data\n");
scanf("%d",&newnode->data);
newnode->next= NULL;
if(head == 0)
{
head=newnode=temp;
}
else
{
temp->next=newnode;
temp= newnode;
}
return head;
}
void display()
{
struct node *temp = head;
if (temp == NULL)
{
printf("empty\n");
}
// create 函数正常工作,但 head 一直设置为 null
//即使链表不为空也不执行这个循环
else
{
while(temp != NULL)
{
printf("%d-->",temp->data);
temp= temp->next;
}
}
return;
}
每次声明函数时都需要创建一个临时变量吗?为什么全局变量不起作用?如果有人可以指出确切的错误吗?提前致谢
解决方案
您的代码中的所有内容都是正确的。此行导致问题head=newnode=temp;
它应该如下面的片段所示。因为您没有将新创建的节点的地址分配给head和temp,而是分配了temp的初始地址。
if(head == 0)
{
head=temp=newnode;
}
推荐阅读
- swiftui - 使用按钮添加用户输入的数据
- php - 如何计算数组中的唯一值并存储在另一个数组 PHP 中?
- javascript - 部署时条件始终为真的 Vue.js v-bind 类
- go - 如何检索整数常量的字节?
- java - 如何在 Eclipse 中使用启动配置作为模板
- python - 在 Python 中从 BMP 文件中提取图像的小区域
- php - CKFinder - 致命错误:具有类类型提示的参数的默认值只能为 NULL
- mysql - MySQL View 数据类型问题?
- unit-testing - Puppeteer 和 Electron 在使用它来测试应用程序的客户端方面有什么区别
- javascript - 突出显示将 id 选择器传递给函数的特定 select2