gpt4 book ai didi

c - 链表不打印

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:47 25 4
gpt4 key购买 nike

我正在尝试使用 C 创建一个简单的链表,我认为我能够构建链表本身,但是当我尝试打印它时,它打印最后一个节点的值而不是列表。

#include <stdio.h>
#include <alloca.h>

typedef int DATA;
struct Node
{
DATA d;
struct Node *next;
};

void printList(struct Node **head)
{
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
struct Node *temp;
temp = *head;
while(temp!=NULL)
{
printf("%d \n", temp->d);
temp = temp->next;
}
}

int main()
{
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
struct Node *head = newNode;
struct Node *temp = newNode;
head->d = 1;
int i = 0;
printf("Enter 3 numbers");

for( i = 0; i< 3; i++)
{
scanf("%d", &temp->d);
temp->next = newNode;
temp = temp->next;
}

temp->next = NULL;
printf("%d \n", temp->d);

return 0;
}

如有任何帮助/提示,​​我们将不胜感激。

最佳答案

您的代码中存在多个问题:

  • 您没有正确创建列表。您只为一个节点分配内存,并且不正确地使用指针导致链表指向同一内存
  • 你根本没有调用 printList 函数
  • 不清楚为什么要在 printList 中再次分配内存,而它应该打印已经创建的列表
  • 另外,不需要为 printList 传递双指针,因为您没有修改列表。

虽然您应该自己理解并进行更改,但我提供了以下修改后的程序,希望它能帮助您理解代码中的错误。

请看下面修改后的代码

#include<stdio.h>
#include <alloca.h>

typedef int DATA;
struct Node
{
DATA d;
struct Node *next;
};


void printList(struct Node *head)
{
struct Node *temp = head;

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

struct Node *createNode()
{
struct Node *newNode;

newNode = malloc(sizeof(struct Node));
if (NULL == newNode)
return NULL;

memset(newNode, 0, sizeof(struct Node));
return newNode;
}

int main()
{
struct Node *newNode = NULL;
struct Node *headNode = NULL;
struct Node *temp = NULL;
int i = 0;
int data = 0;

printf("Enter 3 numbers\n");

for( i = 0; i< 3; i++)
{
scanf("%d", &data);
newNode = createNode();
if (NULL == newNode)
break;

newNode->d = data;

if (headNode == NULL)
{
headNode = newNode;
temp = newNode;
}
else
{
temp->next = newNode;
temp = temp->next;
}
}
printList(headNode);
return 0;
}

关于c - 链表不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42991150/

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