双链表,按顺序添加节点

时间:2015-03-03 22:10:44

标签: c++ sorting linked-list

我想保持我的双向链表一直排序,并保持头部和尾节点指针更新。我设法在所有操作中保持头指针更新,但我无法跟踪尾指针。它只显示最后一个元素为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;
}          

1 个答案:

答案 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;
}