我正在使用插入排序制作一个已排序的双链表,似乎我遇到了问题。 给定的列表是
50 20 60 40 30 100 80 70 90 10
,下面是我所做的代码的一部分(void InsertNode(int v)
),但结果显示为10 20 30 40 60 70 80 90 100 50
。当它应该在40到60之间时,50会出现在列表的末尾。我真的很感谢你的帮助。
void InsertNode(int v){
DblListNode *newNode=new DblListNode;
DblListNode *current, *previous;
newNode->data=v;
current=previous=first;
while(current->right!=first){
if(current->data<v){
previous=current;
current=current->right;
}else break;
}
if(newNode==NULL){
cout<<"No memory for newNode."<<endl;
exit(1);
}
Insert(newNode, previous);
}
void Insert(DblListNode *p, DblListNode *x){
p->left=x;
p->right=x->right;
x->right->left=p;
x->right=p;
}
答案 0 :(得分:0)
您可以将while循环更改为:
do{
if(current->data<v){
previous=current;
current=current->right;
}else break;
}while(current != first);
否则,您永远不会将current->right
等于first
的元素(即最后一个元素)的值与您的值v
进行比较。