首页 > 解决方案 > 函数返回链表中最旧的值

问题描述

这是一个函数(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

标签: clinked-listsegmentation-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列表指针)之后,只需查看元素的字段。


推荐阅读