【问题标题】:Linked List in C not printing the last value [closed]C中的链接列表不打印最后一个值[关闭]
【发布时间】:2013-11-03 08:02:30
【问题描述】:

我正在尝试在 C 中实现链接列表,我在列表末尾插入节点,在我插入值之后,除了最后一个值之外的所有值都在打印。代码如下:

list_t *add(list_t *l,int e)
{
list_t *head;

if(l == NULL)
{
    l = malloc(sizeof(list_t));
    l->val = e;
    l->next = NULL;
    return l;
}       

head = l;

while(l->next != NULL)
    l=l->next;

l->next = malloc(sizeof(list_t));
l=l->next;
l->val = e;
l->next = NULL;

return head;
}

这里是main函数的实现:

int main()
{
list_t *ints=NULL;
list_t *temp;
int i, choice;

while(1){
 printf("1. Enter\n2. Show List\n3. Exit\n\n");
 scanf("%d", &choice);
 switch(choice){
    case 1:
        printf("Enter item\n");
        scanf("%d", &i);
        ints = add(ints,i);
        break;
    case 2:
        temp = ints;
        while(temp->next != NULL)
        {   
            printf("%d\n",temp->val);
            temp=temp->next;
        }
        break;
    case 3:
    default:
        exit(0);

    }
}

return 0;
}

【问题讨论】:

  • 是时候学习如何使用调试器了。

标签: c linked-list


【解决方案1】:

这一行

while(temp->next != NULL)

明确地说“当你到达指向列表末尾的元素时停止”(即当你到达最后一个元素但在你使用它之前停止)。

改为使用

while(temp != NULL)

上面写着“当你不在列表中时停止”。

【讨论】:

  • 别帮助吸血鬼,伙计。
  • 哎哟 :D 好吧,我意识到这个问题有多混乱,那是我开始学习使用调试器(gdb)和学习数据结构以及 gdb 的时候虽然有点麻烦但是归根结底,这一切都值得学习调试器。我现在可以对一个链表进行合并排序,并自己修复错误(大部分情况下),而不是在 stackoverflow 中询问它:) :)
  • 让我觉得这是一个更真诚的帮助请求,而不是大量的“这是我的作业,为我做”的问题,所以这个周末充满了。 gdb 是一个值得学习的熊,但它可以是一个很棒的工具。如果您正在运行现代 GDB,则有一个基于文本的 ui 的命令行选项:gdb -tui,例如如果您正在调试“foo.exe”gdb -tui foo.exe。祝你好运:)
  • 感谢您的帮助,以及使用 GDB 的提示,我会尝试一下 :)
【解决方案2】:

在您的情况 2 中,在您的 main 函数中,一旦不再有下一个元素,您就会退出 while 循环。 但是因为这是您的最后一个元素,所以它不会被显示。 在循环之后添加另一个打印以打印循环不包含的最后一个元素。

    while(temp->next != NULL)
    {   
        printf("%d\n",temp->val);
        temp=temp->next;
    }
    break;

变成

    while(temp->next != NULL)
    {   
        printf("%d\n",temp->val);
        temp=temp->next;
    }
    printf("%d\n",temp->val);
    break;

或更好:

    while(temp!= NULL)
    {   
        printf("%d\n",temp->val);
        temp=temp->next;
    }
    break;

【讨论】:

    猜你喜欢
    • 2020-01-04
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多