在有序链表中插入

时间:2012-02-11 09:10:17

标签: c++ linked-list

我正在尝试在链接列表中插入节点,以便通过de idx参数以升序模式对节点进行排序。

    void add(int i){
    if(find(i)==NULL){ //if node does not exist
        node *m=new node;
        m->idx=i;
        m->values=NULL;
        m->next=NULL;
        if(list==NULL){ //if list is empty
            list=m; 
            return;     
        }           
        if(i < list->idx){ //if the new node comes before the head node
            m->next=list;
            list=m;
            return;         
        }
        //if the new node is bigger than the maximum node index in the list
        if(i > maxIdx(list)){
            node *last=lastNode(list);
            last->next=m;           
        }
        //else normal insertion
        node *prev=list;
        node *curr=list->next;
        while(curr!=NULL){
            if( i < curr->idx){
                m->next=curr;
                prev->next=m;
                return;             
            }
            prev=curr;
            curr=curr->next;
        }
    }   
}

正确实施编辑,第四个如果之前丢失了。

1 个答案:

答案 0 :(得分:3)

就段错而言,对我来说似乎也是正确的。但是,如果i大于列表中的最大数字,则不考虑这种情况。在这种情况下,您应该在列表末尾插入i。因此,首先尝试修复此错误,也许它也会修复段错误(来自其他地方,可能来自您的find()实现)。

现在看起来似乎就是答案(正如你对我的评论的评论所证实的那样)。