#include<stdio.h>
#include<malloc.h>
#define elemType int
//定义数据元素
typedef struct LNode{
elemType data; //数据域
struct LNode *next; //指针域
}LNode,*List;
//头插法创建单链表
List ListHeadInsert(List p){
List s;
int x;
p = (List)malloc(sizeof(LNode)); //创建空结点
p->next = NULL;
printf("请输入数据(以9999结束):\n");
scanf("%d",&x);
while(x!=9999){
s = (List)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next=s;
scanf("%d",&x);
}
return p;
}
//打印单链表
List PrintList(List p){
printf("调用成功");
while(p){
printf("%d",p->data);
p=p->next;
}
// if(!p->next){
// printf("该单链表为空链表");
// }
return p;
}
int main(){
List p ;
ListHeadInsert(p);
printf("创建成功\n");
PrintList(p);
}
ListHeadInsert函数逻辑写错了,给你改一下
#include<stdio.h>
#include<malloc.h>
#define elemType int
//定义数据元素
typedef struct LNode{
elemType data; //数据域
struct LNode *next; //指针域
}LNode,*List;
//头插法创建单链表
List ListHeadInsert(List p){
List s,tt; //修改1,多声明一个变量
int x;
p = (List)malloc(sizeof(LNode)); //创建空结点
p->next = NULL;
tt = p; //修改2,下面的操作用tt,避免改变p的值
printf("请输入数据(以9999结束):\n");
scanf("%d",&x);
while(x!=9999){
s = (List)malloc(sizeof(LNode));
s->data = x;
s->next = NULL;//p->next; 修改3
tt->next = s ;//p->next=s; 修改4
tt = s; //修改5
scanf("%d",&x);
}
return p;
}
//打印单链表
void PrintList(List p){ //修改5,打印函数不用返回
List t = p->next; //修改6:因为你的头结点中没有存放数据,所以从p->next开始遍历输出
printf("调用成功");
while(t){
printf("%d",t->data);
t=t->next;
}
// if(!p->next){
// printf("该单链表为空链表");
// }
//return p; //打印函数,不用再返回了
}
int main(){
List p = 0 ;
ListHeadInsert(p);
printf("创建成功\n");
PrintList(p);
return 0;
}
List p = 0 ;
ListHeadInsert(p); //这里,改成p = ListHeadInsert(p);