gpt4 book ai didi

显示最后一个负元素的 C 编程列表节点

转载 作者:行者123 更新时间:2023-11-30 15:16:29 25 4
gpt4 key购买 nike

我在链接列表方面遇到了一些问题。所以基本上用户只会继续输入值,这些值将被添加到链接列表中,直到用户输入-1。这是我的代码:

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>

typedef struct node
{
int num;
struct node *next;
}ListNode;

int main() {
int n = 0;
ListNode *newNode = NULL, *head = NULL;
newNode = malloc(sizeof(ListNode));
head = newNode;

printf("Enter a list of numbers, terminated by the value -1: ");
do {
scanf("%d", &n);
if (n == -1) {
newNode->next = NULL;
break;
}
else {
newNode->num = n;
newNode->next = malloc(sizeof(ListNode));
newNode = newNode->next;
}
} while (n != -1);

newNode = head;
while (newNode != NULL)
{
printf("%d ", newNode->num);
newNode = newNode->next;
}

return 0;
}

假设我输入了 1 2 3 4 -1。预期输出应该是 1 2 3 4。但是,我收到 1 2 3 4 -842150451。我想知道为什么会有-ve数字。问题出在我的 print listNode 部分吗?

提前致谢。

最佳答案

您分配的节点始终比用户输入的数字多一个。最后一个节点的 num 未初始化(这就是垃圾值的来源)。

这是一个可能的修复:

ListNode **pnode, *head = NULL;
pnode = &head;

printf("Enter a list of numbers, terminated by the value -1: ");
while (scanf("%d", &n) == 1 && n != -1) {
*pnode = malloc(sizeof **pnode);
(*pnode)->num = n;
(*pnode)->next = NULL;
pnode = &(*pnode)->next;
}

循环条件确保我们能够读取一个数字,并且该数字不是 -1。

之后我们只分配一个新节点(即我们只分配与输入的数字一样多的节点)。

pnode 指向节点链中的最后一个指针。它标记了下一个节点应该插入的位置。最初这是 &head (即第一个节点存储在 head 中(通过分配给 *pnode)),但它沿着列表移动每次插入(pnode = &(*pnode)->next,新的最后一个指针)。

关于显示最后一个负元素的 C 编程列表节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com