键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出,哪里出了有关问题?求解答

键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出,哪里出了问题?求解答。
#include<iostream>
using namespace std;

struct node
{
int val;
node *pre,*next;
};
void insert(node* &L,int x);
void print(node *L);
void main()
{
node *la;
la->val=0;
la->next=la;
la->pre=la;
int x;
cout<<"请输入正整数序列,空格隔开并以-1结尾"<<endl;
while(1)
{
cin>>x;
if(x==-1)
break;
insert(la,x);
}
print(la);
}

void insert(node* &L,int x)
{
node *p,*temp,*pre;
p=new node;
p->val=x;
if(L->next==L)
{
L->next=p;
p->pre=L;
p->next=L;
L->pre=p;
}
else
{
temp=L;
while(temp->next->val <= x)
{
pre=temp;
temp=temp->next;
}
pre->next=p;
p->pre=pre;
p->next=temp;
temp->pre=p;
}
}
void print(node *L)
{
node *p;
p=L->pre;
while(p->pre!=L)
{
cout<<p->val<<" ";
p=p->pre;
}
}

------解决方案--------------------
while(temp->next->val <= x)
判断条件是不是有问题,如果已知链表中没有比输入值X大的参数,那链表不就成了死循环了。
------解决方案--------------------
node *la;
la->val=0;
la->next=la;
la->pre=la;
都没给la赋初值,怎么能使用la->val=0呢;应该为:node *la = new node;
while(temp->next->val <= x)
如果输入的值都大于x呢,就成了死循环了

------解决方案--------------------
[code=C/C++][/code]#include<iostream>
using namespace std;

struct node
{
int val;
node *pre,*next;
};

void insert(node* &L,int x);
void print(node *L);

void main()
{
node *la,l;
la = &l;
la->val=0;
la->next=la;
la->pre=la;
int x;
cout<<"请输入正整数序列,空格隔开并以-1结尾"<<endl;
while(1)
{
cin>>x;
if(x==-1)
break;
insert(la,x);
}
print(la);
}

void insert(node* &L,int x)
{
node *p,*temp,*pre;
p=new node;
p->val=x;
if(L->next==L)
{
L->next=p;
p->pre=L;
p->next=L;
L->pre=p;
}
else
{
temp=L;
while(temp->val <= x && temp->next != L)\
{
pre=temp;
temp=temp->next;
}
if(temp->next == L)
{
p->next = L;
temp->next = p;
p->pre = temp;
L->pre = p;
}
else
{
pre->next=p;
p->pre=pre;
p->next=temp;
temp->pre=p;
}
}
}

void print(node *L)
{
node *p;
p=L->pre;
while(p != L)
{
cout<<p->val<<" ";
p=p->pre;
}
}
------解决方案--------------------
1.初始化node要给其分配空间。
2.循环是while(temp->next->val <= x && temp->next!=L)
3.是在Temp的后面插入p,所以应该是
 p->next=temp->next;
 temp->next->pre=p;
 temp->next=p;
 p->pre=temp;
4.print函数的循环应该是while(p!=L),不然会少打印一个最小的数



------解决方案--------------------
C/C++ code
#include<iostream>
using namespace std;

struct node
{
    int val;
    node *pre,*next;
};
void insert(node* L,node * p,int x);
void print(node *L);
void de(node*L);
int main(void)
{
    node *la=new node;
    la->val=0;
    la->next=la;
    int x;
    cout<<"请输入正整数序列,空格隔开并以新的一行Ctil+Z结尾"<<endl;
    while(cin>>x)
    {
        node *p;
        p=new node;
        insert(la,p,x);
    }
    print(la);
    de(la);
    return 0;
}

void insert(node* L,node* p,int x)
{
    node *temp=L;
    node *pp=p;
    pp->val=x;
    if(L->next==L)
    {
        L->next=pp;
        pp->pre=L;
        pp->next=L;
        L->pre=pp;
    }
    else
    {
        while(temp->next->val<=x)
        {
            temp=temp->next;
            if(temp->next==L)
            break;
        }
        pp->next=temp->next;
        temp->next->pre=pp;
        temp->next=pp;
        pp->pre=temp;
        
    }
}
void print(node *L)
{
    node *p;
    p=L->pre;
    while(p->pre!=L->pre)
    {
        cout<<p->val<<" ";
        p=p->pre;
    }
} 
void de(node *L)
{
    node *tem;
    tem=L;
    while(tem!=L->next)
    {
        L=L->next;
        delete(L->pre);
    }
    delete(tem);
    delete(L);
}