gpt4 book ai didi

c - c中的malloc链表

转载 作者:行者123 更新时间:2023-11-30 18:33:32 33 4
gpt4 key购买 nike

我是 C 新手。我需要使用 malloc 在 c 中创建一个链接列表,我应该在 struct list* Solution() 中创建我的解决方案。给定一个数字列表,我需要它们显示,直到给出 int -1 为止。创建链表后,返回一个指向链表根节点的指针。到目前为止,我只能在程序执行后得到一个数字。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct list{
int value;
struct list *next;
} List ;

struct list* solution()
{
int n = 0, a;
List *listpointer;
List *listpointer2;
listpointer = ( List* ) malloc( 200 * sizeof(List*));
listpointer2 = ( List* ) malloc( 200 * sizeof(List*));
//for(n = 0; n < 7; n++)
do
{
scanf("%d", &a);
if(a < 0)
{
listpointer[n].next = NULL;
break;
}
listpointer[n].value = a;
listpointer[n].next = listpointer2[n].next;

n++;
//scanf("%d", &a);
//listpointer2[n].value = a;
//listpointer2[n].next = listpointer2[n].value;
}while( a > 0);

return listpointer;
}

int main()
{
struct list *l=NULL,*temp;
l = solution();
if(l==NULL)
printf("list is empty");
else
{
do{
printf("%d ",l->value);
temp = l;
l = l->next;
}while(temp->next!=NULL);
}
}

我预计输出为 2 6 4 7 8 2 9,但到目前为止我只能产生 2 或 9 的输出。

最佳答案

您不应该分配数组。创建链表时,每次循环都会分配一个链表节点。

您需要两个变量 - head 是指向列表中第一个节点的指针,listpointer 是指向最后一个元素的指针,我们要在其中追加下一个节点。

struct list* solution()
{
int n = 0, a;
List *listpointer = NULL;
List *head = NULL;
while(1)
{
scanf("%d", &a);
if(a < 0)
{
break;
}
List *newNode = malloc(sizeof(List));
newNode->value = a;
newNode->next = NULL;
if (listpointer) {
listpointer->next = newNode;
listpointer = newNode;
} else {
listpointer = newNode;
head = newNode;
}
}

return head;
}

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

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