我想保持我的双向链表一直排序,并保持头部和尾节点指针更新。我设法在所有操作中保持头指针更新,但我无法跟踪尾指针。它只显示最后一个元素为tail->info
,但无法返回,因为tail=tail->prev;
这里是我的代码:
AddInOrder(node* &head, node* &tail, int number) {
node *ptr=head;
if (head==NULL || number<head->info) {
node*temp=new node;
temp->info=number;
temp->next=head;
temp->prev=NULL;
head=temp;
tail=temp;
return 0;
}
while(ptr->next!=NULL && ptr->next->info<number) {
ptr=ptr->next;
}
node*temp=new node;
temp->info=number;
temp->next=ptr->next;
temp->prev=ptr;
ptr->next=temp;
while(ptr->next!=NULL) {
ptr=ptr->next;
}
tail=ptr;
return 0;
}
答案 0 :(得分:1)
@JonathanPotter是对的。 &#34;您在链接新节点时未设置ptr-&gt; prev。&#34;那就是问题所在。 这段代码对我来说很好。看到修改,添加了一些设置prev节点的部分。代码可能有点乱,但你可能理解逻辑并编写更好的代码。
int AddInOrder(node* &head, node* &tail, int number)
{
node *ptr=head;
node*temp=new node;
temp->info=number;
if ( head==NULL )
{
temp->next=head;
temp->prev=NULL;
head=temp;
tail = temp;
return 0;
}
if ( number<head->info )
{
temp->next=head;
temp->prev=NULL;
head->prev = temp;
head=temp;
return 0;
}
while(ptr->next!=NULL && ptr->next->info<number)
{
ptr=ptr->next;
continue;
}
if (ptr->next != NULL)
{
ptr->next->prev = temp;
}
temp->next=ptr->next;
temp->prev=ptr;
ptr->next=temp;
while(ptr->next!=NULL)
{
ptr=ptr->next;
}
tail=ptr;
return 0;
}