2012-02-11 3 views
0

Я пытаюсь вставить узел в связанный список, чтобы узлы упорядочивались в восходящем режиме по параметру 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; 
     } 
    } 
} 

Отредактировано с правильной реализацией, четвертое, если раньше отсутствовало.

+0

Это домашнее задание? –

+0

Я новичок, это не домашнее задание. Я могу сделать вставку в голову или хвост, и теперь я пытаюсь сделать упорядоченную вставку. – Vektor88

+1

Какова связь между 'mrow' и' node'? – cnicutar

ответ

3

Это кажется правильным и для меня, насколько это касается segfault. Однако вы не рассматриваете случай, когда i больше наибольшего числа в списке. В этом случае вы должны вставить i в конце списка. Поэтому сначала попробуйте исправить эту ошибку, возможно, она также исправит segfault (который исходит из другого места, возможно, из вашей реализации find()).

Теперь кажется, что это ответ (так как ваш комментарий к моему комментарию подтверждает это).

Смежные вопросы