c - 函数返回链表中最旧的值
问题描述
这是一个函数(last),它返回链表(最后一个节点)中最旧的值:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node *next;
}Elem, *Pointer;
Pointer init() { return NULL; }
void last(Pointer l)
{
while (l != NULL)
{
l = l->next;
}
printf("%d",l->val);
}
int main(void) {
Pointer myl =
insert(3, insert(7, insert(5,
insert(11, insert(1, init ())))));
last(myl);
}
所以函数 (last) 接受一个指向链表的指针,并在 while 循环中将指针移动到最后一个节点,然后打印它的值。
错误是: exited, segmentation fault
。
解决方案
由于检查 NULLl
是您从循环中退出的条件,因此当您到达循环结束时
while (l != NULL)
{
l = l->next;
}
printf("%d",l->val);
l
是 NULL (否则你仍然会循环!)。因此,在下文中,printf
您将取消引用 NULL 指针,这会导致分段错误。
您可以通过以下方式修改您的功能:
void last(Pointer l)
{
if ( l != NULL )
{
while (l->next != NULL)
{
l = l->next;
}
printf("%d",l->val);
}
}
next
在确保列表不为空(NULL
列表指针)之后,只需查看元素的字段。
推荐阅读
- java - java map和python字典的比较
- django - 如何在 .xls 文件的 django-import-export 中进行字段验证
- python - 基于 $ 的错误输出?bash 中的值
- java - 有没有办法持久化一个字段,但是在执行 GET 时,该字段没有序列化
- node.js - NodeJS 并行运行函数从 REST API 获取数据
- azure - 自动通过电子邮件发送 Azure 订阅成本分析仪表板
- python - 如何根据存储在另一个数组中的索引创建一个 NumPy 数组?
- python - 如何使用 LSTM 的输出和重塑
- flutter - 如何控制使用 Flutter 上传的视频质量?
- google-apps-script - 为什么此函数会在我的一个文件上生成 http:500 错误?