c语言数据结构单链表(头插入法)
这程序不知道哪里出问题了,纠结了一天了,求大神!!!~~~#include<stdio.h>#include<stdlib.h>typedefintElemtype;ty...
这程序不知道哪里出问题了,纠结了一天了,求大神!!!~~~
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
typedef struct
{
Elemtype data;
struct LNode *next;
}LNode;
LNode *Createlist(LNode *head) //创建单链表,头插入法
{
LNode *p;
Elemtype data;
head=(LNode *)malloc(sizeof(LNode));
head->next=NULL;
while(1)
{
printf("please input data: ");
scanf("%d",&data);
if(data==777)break; //直到输入的数据为777时,停止输入
p=(LNode *)malloc(sizeof(LNode));
head->data=data;
head->next=p->next;
head->next=p;
}
return head;
}
int Print(LNode *head)
{
LNode *j; //新建一个指针,让它指向head,从而进行输出操作
j=head;
while(j->next!=NULL)
{
printf("%d ",j->data);
j=j->next;
}
}
int main()
{
LNode *head;
head=Createlist(head);//链表初始化
Print(head); //打印单链表数据
return 0;
} 展开
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
typedef struct
{
Elemtype data;
struct LNode *next;
}LNode;
LNode *Createlist(LNode *head) //创建单链表,头插入法
{
LNode *p;
Elemtype data;
head=(LNode *)malloc(sizeof(LNode));
head->next=NULL;
while(1)
{
printf("please input data: ");
scanf("%d",&data);
if(data==777)break; //直到输入的数据为777时,停止输入
p=(LNode *)malloc(sizeof(LNode));
head->data=data;
head->next=p->next;
head->next=p;
}
return head;
}
int Print(LNode *head)
{
LNode *j; //新建一个指针,让它指向head,从而进行输出操作
j=head;
while(j->next!=NULL)
{
printf("%d ",j->data);
j=j->next;
}
}
int main()
{
LNode *head;
head=Createlist(head);//链表初始化
Print(head); //打印单链表数据
return 0;
} 展开
2个回答
展开全部
head=(LNode *)malloc(sizeof(LNode));
这一句不要,没啥用处,除非你head指向的节点也就是第一个节点的data不需要数据
head->next=NULL;这里修改为head=NULL;
让head先指向NULL,也就是没有节点
其实这个可以不要,再主函数中,先让链表是空链表即可(即让head=NULL)
head->data=data;
head->next=p->next;
head->next=p;
关键在这里
你仔细考虑一下,一般来说头插法的head只是一个指针,不要对head指向的那个节点操作,对p操作完成后,让head指过去即可
所以修改为
p->data=data; //赋值过去,因为你现在申请了p的内存空间
p->next=head; //把head指向的那个节点连接到p的后面,这样完成头插
// 这是head没有用了,p成为链表的头指针
head=p; //head再指向这个链表的头部,也就是p指向的节点,为下一次循环做准备
head=Createlist(head);//链表初始化
主函数中这样不太好,建议不要重名
这一句不要,没啥用处,除非你head指向的节点也就是第一个节点的data不需要数据
head->next=NULL;这里修改为head=NULL;
让head先指向NULL,也就是没有节点
其实这个可以不要,再主函数中,先让链表是空链表即可(即让head=NULL)
head->data=data;
head->next=p->next;
head->next=p;
关键在这里
你仔细考虑一下,一般来说头插法的head只是一个指针,不要对head指向的那个节点操作,对p操作完成后,让head指过去即可
所以修改为
p->data=data; //赋值过去,因为你现在申请了p的内存空间
p->next=head; //把head指向的那个节点连接到p的后面,这样完成头插
// 这是head没有用了,p成为链表的头指针
head=p; //head再指向这个链表的头部,也就是p指向的节点,为下一次循环做准备
head=Createlist(head);//链表初始化
主函数中这样不太好,建议不要重名
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
int Print(LNode *head)
{
LNode *j; //新建一个指针,让它指向head,从而进行输出操作
j=head;
while(j->next!=NULL)
{
printf("%d ",j->data);
j=j->next;
}
}
改为:
int Print(LNode *head)
{
LNode *j; //新建一个指针,让它指向head,从而进行输出操作
j=head;
while(j!=NULL)
{
printf("%d ",j->data);
j=j->next;
}
}
{
LNode *j; //新建一个指针,让它指向head,从而进行输出操作
j=head;
while(j->next!=NULL)
{
printf("%d ",j->data);
j=j->next;
}
}
改为:
int Print(LNode *head)
{
LNode *j; //新建一个指针,让它指向head,从而进行输出操作
j=head;
while(j!=NULL)
{
printf("%d ",j->data);
j=j->next;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询