gpt4 book ai didi

使用递归创建打印和计数链接列表

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

我尝试按如下方式创建链表,但输出是一个固定列表两个元素且计数为 2

#include<stdio.h>
#define null 0
struct list
{
int num;
struct list *next;
};

typedef struct list node;

int create(node *list)
{ int n;
printf("enter the element to end the list finish it with -999\n");
scanf("%d",&n);
if(n==-999)return 0;
else {
list=(node *)malloc(sizeof(node *));
list->num=n;
if(!(create(list->next)))list->next=null;
return 1}
}
void printlist(node * list) {
if(list->next==null)
{printf("%d->",list->num);return;}
else
{printf("%d->",list->num);printlist(list->next);}
return;
}

int count(node *list) {
if(list->next==null)return 1;
else return(1+count(list->next));
}

void main() {
node *list;
create(list);
printlist(list);
printf("\n%d",count(list));
}

将指针传递给函数是否有任何问题。

最佳答案

当您将指针传递给create时,它会创建该指针的副本。也就是说,如果您在create中修改list,它不会改变mainlist的值。

尝试将mainlist的指针传递给create。这将允许您在 create 中更改列表。

// in main:
create(&list)

// in create
int create(node** listptr) {
// similar code to before except
// that list should be replaced with
// (*listptr)
//
// the example below will assing a value
// to the variable list in main:
// (*listptr) = x

// ...

}

打印应该按原样工作。它不需要节点**,因为它不会更改列表。

关于使用递归创建打印和计数链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326689/

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