建立链表,统计链表中所有结点的数据域N之和

iwm_NeXT 2012-04-07 07:41:54
/*
典型例题:建立链表,统计链表中所有结点的数据域N之和
*/
#include<stdio.h>
#include<malloc.h>
struct node{
int n;
struct node *next;
};
struct node *create() //建立链表
{
struct node *head,*p1,*p2;
head=NULL;
p1=p2=(struct node *)malloc(sizeof(struct node )) ; //分配内存空间使p1和p2同时指向这个空间的起始地址
scanf("%d",&p1->n); //
while(p1->n!=0) //
{
if(head=NULL) //
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->n);
}

p2->next=NULL;
return head; //返回链表的头指针
}

int add(struct node *head) //把结点加入链表中
{
struct node *p;
int sum=0; //定义sum变量存放数据域n的和
p=head;
while(p!=NULL)
{
sum+=p->n;
p=p->next;
}
return sum; //向主调函数返回sum的值,即数据域n的和

}

void main()
{
struct node *head;
int m;
head=create();
m=add(head);
printf("%d\n",m);
}
输入值始终得到sum的值为0,哪点错了?????????????
...全文
407 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
忘世麒麟 2012-04-07
  • 打赏
  • 举报
回复

struct node *create() //建立链表
{
struct node *head,*p1,*p2;
head=NULL;
p1=(struct node *)malloc(sizeof(struct node )) ; //分配内存空间使p1和p2同时指向这个空间的起始地址
scanf("%d",&p1->n);
p1->next=NULL;
while(p1->n!=0)
{
if(head==NULL)
{
head=p1;
p2=head;//p2始终指向表尾
}
else
{
p2->next=p1;
p2=p2->next;//表位添加元素p2后移以指向表尾
p1=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->n);
p1->next=NULL;
}
}
p2->next=NULL;
return head; //返回链表的头指针
}
iwm_NeXT 2012-04-07
  • 打赏
  • 举报
回复
谢谢,muyi66, 应该把head 初始化指向开辟的新空间起始地址
忘世麒麟 2012-04-07
  • 打赏
  • 举报
回复
问题1:
if(head=NULL)
head=p1;
改为:
if(head==NULL)
head=p1;
问题2:你的p2貌似什么用都没有.create函数最多将p1赋值给head,p1的最后一次输入是0,则head->n=0,且只有这一个节点.
summer_insects 2012-04-07
  • 打赏
  • 举报
回复
有malloc,没free
muyi66 2012-04-07
  • 打赏
  • 举报
回复
不适当的条件判断导致了你的状况,改成下面这样就好了:
struct node *create() //建立链表
{
struct node *head,*p1,*p2;
//head=NULL;
head=p1=p2=(struct node *)malloc(sizeof(struct node )) ; //分配内存空间使p1和p2同时指向这个空间的起始地址
scanf("%d",&p1->n); //
while(p1->n!=0) //
{
p2->next=p1;
p2=p1;
p1=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->n);
}

p2->next=NULL;
return head; //返回链表的头指针
}
zff869030831 2012-04-07
  • 打赏
  • 举报
回复
你单步调试下不就知道了吧
iwm_NeXT 2012-04-07
  • 打赏
  • 举报
回复
up一个

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧