c - 简化链表指针循环
问题描述
试图从文件中扫描数字并将它们存储为链表,但是每次扫描和存储值时,用于链接节点的临时指针 (ptr) 都会运行一个 while 循环。有没有办法在不使用while循环的情况下简化它?我的方法似乎不起作用。
原始代码:
struct node
{
int data;
struct node *link;
} *head = NULL, *ptr = NULL, *temp = NULL;
int main()
{
-----
-----
for (i = 0; i < n ; ++i)
{
temp = malloc(sizeof(struct node));
fscanf(fptr, "%d", &(temp->data));
temp->link = NULL;
if (head == NULL)
head = temp;
else
{
ptr = head;
while (ptr->link != NULL)
ptr = ptr->link;
ptr->link = temp;
}
}
-----
}
我的方法:
struct node
{
int data;
struct node *link;
} *head = NULL, *ptr = NULL, *temp = NULL;
int main()
{
-----
-----
for (i = 0; i < n ; ++i)
{
temp = malloc(sizeof(struct node));
fscanf(fptr, "%d", &(temp->data));
temp->link = NULL;
if (head == NULL)
{
head = temp;
ptr = head;
}
else
{
ptr->link = temp;
ptr->link = ptr->link->link;
}
}
-----
}
解决方案
在此代码段中
else
{
ptr->link = temp;
ptr->link = ptr->link->link;
}
ptr->link
设置为,NULL
因为实际上它设置temp->link
为等于NULL
由于此分配
temp->link = NULL;
你需要的是写
else
{
ptr->link = temp;
ptr = temp;
}
实际上,您正在尝试实现一个双边单链表,其中指针ptr
扮演尾指针的角色..
推荐阅读
- php - 使用 PHP 从 MySQL 数据库打开 Word 文件下载时发现不可读的内容
- vue.js - 如何添加用户输入 vue&axios api 调用?
- r - 如何在 Rmarkdown 中格式化类似帮助的文档
- python - 如何准备 MNIST 格式的图像数据集
- java - Android api 级别 8.1 的更新
- ruby-on-rails - 传递给角度时Rails中的数组序列未正确转换
- git - 为什么 Git 需要设计 Index /Stage?
- wordpress - 自动优化无法写入缓存目录
- amazon-web-services - 如何获取 AWS lambda 函数执行状态
- typescript - 为什么 Array.map 允许我传递非泛型类型的成员