C语言链表问题 为什么数据老是存不到链表里去呢

#include<stdio.h>#include<stdlib.h>structlian{intdata;structlian*next;};voidcreat(str... #include <stdio.h>
#include <stdlib.h>
struct lian
{
int data;
struct lian *next;
};

void creat(struct lian *S,int t)
{
struct lian *P1,*Q;
P1=(struct lian*)malloc(sizeof(struct lian));
P1->data=t;
P1->next=NULL;
Q=S->next; // 跳过头结点
if(Q==NULL)
Q=P1;
else {
while (Q->next!=NULL) // 如果后面还有节点,继续
Q=Q->next;
Q->next=P1;
}
}

void look(struct lian *S)
{struct lian *Q=S->next; // 跳过头节点
while(Q!=NULL)
{
printf("%d\n",Q->data);
Q=Q->next;
}
}

void addcreat(struct lian *S)
{ int a=0,num,data;
struct lian *Q=S;
printf("请输入需要添加的数据个数\n");
do{

scanf("%d",&num);
if(num<=0)
printf("\n您输入的数据有误,请重新输入");

}while(num<=0);
for(;a<num;a++)
{ printf("请输入第%d个数据",a+1);
scanf("%d",&data);
creat(Q,data);
}

}

int main()
{ int num;

struct lian *head=NULL;
head=(struct lian*)malloc(sizeof(struct lian));
head->next=NULL; // 头结点没有数据,后面处理要跳过它

printf("《主菜单》");
printf("\n用键盘输入不同的数字进行功能选择");
printf("\n1 向链表中添加新的数据");
printf("\n2 删除链表中的数据");
printf("\n3 遍历整个链表并打印出来\n");
scanf("%d",&num);
switch(num)
{
case 1: addcreat(head);look(head);break;
case 2:
case 3:
default:;

}

}
展开
 我来答
匿名用户
2016-10-31
展开全部
#include <stdio.h>
#include <stdlib.h>
struct lian
{
 int data;
 struct lian *next;
};
void creat(struct lian *S,int t)
{
 struct lian *P1,*Q;
 P1=(struct lian*)malloc(sizeof(struct lian));
 P1->data=t;
 P1->next=NULL;
 Q=S->next;  // 跳过头结点
 if(Q==NULL)
    S->next=P1;
 else {
 while (Q->next!=NULL)  // 如果后面还有节点,继续
    Q=Q->next;
  Q->next=P1;
  }
}
void look(struct lian *S)
{struct lian *Q=S->next;       // 跳过头节点
 while(Q!=NULL)
 {
  printf("%d\n",Q->data);
  Q=Q->next;
 }
}
void addcreat(struct lian *S)
{
 int a=0,num,data;
 struct lian *Q=S;
 printf("请输入需要添加的数据个数\n");
 do{
  scanf("%d",&num);
  if(num<=0)
   printf("\n您输入的数据有误,请重新输入");
 }while(num<=0);
 for(;a<num;a++)
 {
  printf("请输入第%d个数据",a+1);
  scanf("%d",&data);
  creat(Q,data);
 }
}
int main()
{
 int num;
  
 struct lian *head=NULL;
 head=(struct lian*)malloc(sizeof(struct lian));
 head->next=NULL;    // 头结点没有数据,后面处理要跳过它
 do{
  printf("《主菜单》");
  printf("\n用键盘输入不同的数字进行功能选择");
  printf("\n1 向链表中添加新的数据");
  printf("\n2 删除链表中的数据");
  printf("\n3 遍历整个链表并打印出来");
  printf("\n4 退出\n");
  scanf("%d",&num);
  switch(num)
  {
   case 1: addcreat(head);look(head);break;
   case 2:
   case 3: look(head);break;
   default:;
  }
 }while(num!=4);
}

关键是creat里面有点小问题。

void creat(struct lian *S,int t)
{
 struct lian *P1,*Q;
 P1=(struct lian*)malloc(sizeof(struct lian));
 P1->data=t;
 P1->next=NULL;
 Q=S->next;  
 if(Q==NULL)
    S->next=P1;    // 就是这里
 else {
 while (Q->next!=NULL) 
    Q=Q->next;
  Q->next=P1;
  }
}

其实完全可以用下面这个,不用那么复杂

void creat(struct lian *S,int t)
{
 struct lian *P1,*Q;
 P1=(struct lian*)malloc(sizeof(struct lian));
 P1->data=t;
 P1->next=NULL;
 Q=S;
 while (Q->next!=NULL)   Q=Q->next;
 Q->next=P1;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式