主题:[讨论]在带头结点的单链表中插入值
#include <stdio.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node * next;
}LNode,* LinkList;
LinkList Creat_LinkList()
{
LinkList L;
LNode *p=L;
LNode *s;
datatype x;
scanf("%d",&x);
while(x>=0)
{
s=( LNode * )malloc(sizeof(LNode));
s->data=x;
p->next=s;
p=s;
scanf("%d",&x);
}
return L;
}
void Insersort(LinkList L,datatype x)
{
LNode * p=L,*s;
while(p->next&&p->next->data<=x)
p=p->next;
s=(LNode * )malloc(sizeof(LNode));
s->data=x;
p->next=s->next;
p->next=s;
return;
}
void out_LinkList(LinkList L)
{
LNode * p=L;
while(p!=NULL)
printf("%4d",p->data);
p=p->next;
}
void main()
{
int x;
LinkList L;
L=Creat_LinkList();
out_LinkList(L);
scanf("x=%d",&x);
Insersort( L, x);
out_LinkList( L);
}
这是我们书上的一题目,已知带头结点的单链表L中的结点是按整数值递增排列,将值为x的结点插入表中,使得表仍有序.
上面的是我写的程序,可是我运行的时候,出现了死循环,程序哪里有错??
typedef int datatype;
typedef struct node
{
datatype data;
struct node * next;
}LNode,* LinkList;
LinkList Creat_LinkList()
{
LinkList L;
LNode *p=L;
LNode *s;
datatype x;
scanf("%d",&x);
while(x>=0)
{
s=( LNode * )malloc(sizeof(LNode));
s->data=x;
p->next=s;
p=s;
scanf("%d",&x);
}
return L;
}
void Insersort(LinkList L,datatype x)
{
LNode * p=L,*s;
while(p->next&&p->next->data<=x)
p=p->next;
s=(LNode * )malloc(sizeof(LNode));
s->data=x;
p->next=s->next;
p->next=s;
return;
}
void out_LinkList(LinkList L)
{
LNode * p=L;
while(p!=NULL)
printf("%4d",p->data);
p=p->next;
}
void main()
{
int x;
LinkList L;
L=Creat_LinkList();
out_LinkList(L);
scanf("x=%d",&x);
Insersort( L, x);
out_LinkList( L);
}
这是我们书上的一题目,已知带头结点的单链表L中的结点是按整数值递增排列,将值为x的结点插入表中,使得表仍有序.
上面的是我写的程序,可是我运行的时候,出现了死循环,程序哪里有错??