C语言链表的问题,高手来看看我怎么就错了!!!!!!

2024-12-28 10:56:17
推荐回答(3个)
回答1:

见下面代码中的注释
#include
#include
struct node
{
int a;
struct node *next;
};
int s=0;
void main()
{
struct node *creat(); //应该改成struct node *creat(struct node *head);
int print(); //应该改成int print(struct node *head);
struct node *head=NULL;
head=creat(head);
s=print(head);
printf("%d",s);
//这里最好加个删除链表的函数,否则内存泄漏
}
struct node *creat(struct node *head)
{
struct node *tail,*p;
head=tail=NULL;
p=(struct node *)malloc(sizeof(struct node));
printf("请任意输入一个数:");
scanf("%d",&p->a);
while(a!=0) //这里应该改为while(p->a!=0)
{
p->next=NULL;
if(head==NULL)
head=tail=p;
else
{
tail->next=p;
tail=p;
//这里应该加一句 p->next=NULL;否则print()会错。
}
printf("请再输入一个数:");
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p->a);
}
return head;
}
int print(struct node *head)
{
struct node *p;
p=head;
while(p!=NULL)
{
s=s+p->a;
p=p->next;
}
return s;
}

回答2:

struct node *creat();
int print();
struct node *creat(struct node *head)
int print(struct node *head)
函数声明和定义都要完全一致,你的声明没有参数变量
while(a!=0)
a变量没有定义, 你是要p->a呢还是a是另一个变量(这个需要在函数中声明)

回答3:

#include
我给你一个参考代码,希望对你有所帮助
养成一个良好的编程习惯对你有用
#include

typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode;
typedef LNode *LinkList;
//****************************************************************************

LinkList CreateList()//头插入法 建立带头节点的链表
{
LinkList L;
LinkList P;
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;//建立空链表
printf("请输入第一个元素并以0作为输入结束的标志\n");
scanf("%d",&x);
while(x!=0)//以输入0作为输入结束标志
{
P=(LinkList)malloc(sizeof(LNode));
P->data=x;
P->next=L->next;
L->next=P;
scanf("%d",&x);
}
return L;
}

void printsum(LinkList L)//求链表各元素的和
{
LinkList p;
int sum=0;
p=L->next;
while(p){sum=sum+p->data;p=p->next;}
printf("%d\n",sum);

}

int main()
{
LinkList a,b,c,d,f;
ElemType e;
a=CreateList();
printsum(a);
return 0;
}