2012-03-25 33 views
0

我正在寫一個程序,以根據字符串將元素插入到單個鏈表中(函數strcmp將它們放到正確的位置)。C++單鏈表(使用結構),插入錯誤

#include <iostream> 
#include <cstdlib> 
#include <cstring> 
using namespace std; 

struct list 
{ 
    int num; 
    char* word; 
    list* next; 
}; 
list* head; 
void insert(int number,char* txt){ 
    list* ptr,*tmp; 
     ptr=head; 
    list* newlist=new list; 
    newlist->num=number; 
    newlist->next=NULL; 
    //newlist->word= new char(strlen(txt)+1); 
    newlist->word=txt; 
    if(head==NULL){ 
     head=newlist; 
     newlist->next=NULL; 
    } 
    else while(ptr!=NULL){ 
      if(strcmp(txt,ptr->word)>=0){ 
       if(ptr->next!=NULL && strcmp(txt,ptr->next->word)<=0) 
      { 
       tmp=ptr->next; 
       ptr->next=newlist; 
       newlist->next=tmp; 
       break; 
      } 
       else if(ptr->next!=NULL && strcmp(txt,ptr->next->word)>0) 
        ptr=ptr->next; 
       else 
       { 
        //next is empty 
        ptr->next=newlist; 
        break; 
       } 
    } 
      else{ 
       //txt mniejszy niz w 1szym elemencie 
       newlist->next=head; 
       head=newlist; 
       break; 
      } 
      return; 
    } 
} 

void print(){ 
    list *druk; 
    druk=head; 
    while(druk!=NULL){ 
     cout<<"txt: "<<druk->word<<" | "<<"num: "<<druk->num<<endl; 
     druk=druk->next; 
    } 
    return; 
} 

int main(){ 

    head=NULL; 

    insert(242,"Szulasdj"); 
    insert(32,"aab"); 
    insert(32,"aab"); 
    insert(14,"aaa"); 
    insert(85,"bbb"); 
    insert(5,"aac"); 
    insert(3,"ccc"); 
    insert(4,"cdc"); 
    insert(2,"ccd"); 

    print(); 
    cout << endl << endl; 
    getchar(); 
    return 0; 
} 

我不明白爲什麼它不打印我插入的所有元素。如果你能告訴我我的錯誤在哪裏,我會非常感激。

+1

這裏有很多基本問題。首先,每次調用'insert'時,它會生成一個新的列表對象,然後導致內存泄漏。 – 2012-03-25 18:05:49

+0

能更準確地解釋嗎?另外我該如何解決它?除了遵循twain249的建議之外,它工作正常。 – 2012-03-25 18:21:06

回答

1

將返回移到while循環的外部。如果您進入了移動指針的情況,則必須再次通過while循環,並在返回之前退出該方法。