关于插入链表的问题
你们好,这里建立个链表,有2个结点,想插入一个结点,可是编译后,运行,无反应,请问什么回事呢?谢谢!代码:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct student) //定义结构常量
#define NULL 0
struct student //定义结构体
{
int num;
float sorce;
struct student *next;
};
struct student *insert(struct student *head,struct student *s)//定义插入链表函数
{
struct student *p1,*p2,*p0;
p0=s; //p0为待插入结点
p1=head; //p1指向头结点
if(head==NULL) //如果输入的头结点为空
{
head=p0; //把待插入结点当做头结点
p0->next=NULL; //指向空,即只有插入的一个节点
}
else
{
while((p0->num>p1->num) && (p1->next!=NULL))//查询,判断结点位置,如果插入节点在p1后面,让p1再指向下一个结点,直到符合插入条件
{
p2=p1;
p1=p1->next;
}
}
//找到插入位置
if(p0->num <= p1->num)
{
if(p1==head) //如果是在头结点之前
{
p0->next=head; //插入在头结点之前
head=p0;
}
else
{
p2->next=p0; //如果在头尾之间,把前一个结点的尾指针指向待插入结点p0
p0->next=p1; //把待插入节点尾指针指向后一个结点,即p1
}
}
else //如果待插入结点在最后一个结点后面
{
p1->next=p0; //把最后一个结点的尾指针指向待插入节点
p0->next=NULL; //待插入结点尾指针指向空
}
return head; //返回修改后结点的头结点地址
}
void print(struct student *head) //定义逐个打印子函数
{
int k=0; //定义结点数
struct student *pt;
pt=head; //要打印链表的头结点地址
while(pt!=NULL) //循环,直到为空,即最后一个结点
{
k++;
printf("%d,%d,%f\n",k,pt->num,pt->sorce);//打印,第几个结点,并且结点数据
pt=pt->next; //指向下一个结点继续打印
}
}
void main() //主函数
{
struct student *pt,*head;
head=NULL; //先把head指向空,赋初值。
//为链表中2个结点赋值
head=(struct student *)malloc(LEN);//分配空间
head->next=(struct student *)malloc(LEN);
//定义第一个结点,静态
head->num=5;
head->sorce=100;
head->next->num=10;
head->next->next=NULL;
//构造待插入结点
pt=(struct student *)malloc(LEN);
pt->num=8;
pt->next=NULL;
insert(head,pt); //插入
print(head); //打印
system("pause");
}