链表插入程序错在哪里-——为什么循环是死循环 请高手赐教
#include<stdlib.h>#include<iostream>
using namespace std;
typedef struct node{
int data;
struct node *next;
}Lnode,*linknode;
Lnode *creat(int n){
Lnode *H,*p,*s;
cout<<"链表已创建请连续输入链表内数据"<<endl;
int x,i;
H=(Lnode*)malloc(sizeof(Lnode));
p=H;
for(i=0;i<n;i++){
cin>>x;
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next=NULL;
p->next=s;
p=s;
}
p->next=NULL;
return H;//返回头结点
}//创建链表
/*输出链表*/
Lnode*print(Lnode *H){
Lnode *p,*s;
p=H->next;
while(p)
{
cout<<p->data<<" ";
s=p->next;
p=s;
}
cout<<endl;
return 0;
}//链表输出函数
linknode init(linknode la,linknode lb,int n)
{ linknode p,q;
int f=1,i;
p=la;
q=p->next;
if(!n)
p->next=lb;
else
{
for(i=0;i<n;i++)
{
if(q->data>=lb->data)
{
q->next=lb;
lb->next=q;
i=0;//i等于以表示已经插入链中
break;
}
else
{
p=p->next;
q=q->next;
}
}
if(i)
q->next=lb;
}
return 0;
}
void main ()
{
int x,n;
Lnode *h,*lb;
cout<<"请输入链表的长度:";
cin>>n;
h=creat(n);//注意指针的引用
print(h);//指针的正确使用原先写为print(h)造成程序不能调用
lb=(Lnode*)malloc(sizeof(Lnode));
cout<<"请输入新节点数据";
cin>>x;
lb->data=x;
cout<<lb->data;
lb->next=NULL;
init(h,lb,n);
print(h);
}