键盘输入正整数序列-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),不然会少打印一个最小的数
------解决方案--------------------
#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); }