思路:
每次输入一个数据x,
找到一个位置——后继的数据>x,前驱的数据<x。
所以要每次p=L;从头开始寻找该位置。然后插入。
#include <bits/stdc++.h>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*Linklist;
void listsort(Linklist &L,int x)//
{
Linklist p,q;
p=L; //每次p都从L开始;
while(p->next!=NULL&&p->next->data<x)//寻找插入位置
p=p->next;
q=new LNode;
if(p->next==NULL)//顺序,则在最后插入
{
q->data=x;
q->next=NULL;
p->next=q;
}
else{
q->data=x;
q->next=p->next;
p->next=q;
}
}
void out(Linklist &L)//数据之后空格,最后一个数据回车
{
Linklist p;
p=L->next;
int f=0;
while(p!=NULL)
{
if(f==0)
cout<<p->data;
else
cout<<" "<<p->data;//把空格放在数据之前,最后再空格。
f=1;
p=p->next;
}
cout<<endl;
}
int main()
{
Linklist L;
L=new LNode;
L->next=NULL;
int x;
while(cin>>x&&x)
{
listsort(L,x);
}
out(L);
// cout << "Hello world!" << endl;
return 0;
}