2014-02-21 49 views
0

嘿,我創建了一個函數,將輸入的值插入已排序的鏈接列表中,現在我試圖創建另一個函數來刪除鏈接列表中輸入的值。目前我正在陷入無限循環的裏克詹姆斯,這令人難以置信的令人沮喪。刪除已排序的鏈接列表中的值

typedef int ListItemType; // global value in my header file 
ListItemType item; // assigned in head file under ListNode struct 

bool List::remove(const ListItemType& removedItem) { 
ListNode *curr = head; 
ListNode *prev = NULL; 

//empty list 
if(head == NULL){ 
    cout<< "No items in the list"; 
}else{ 

    //traverse the list 
while(curr != NULL){ 
    if(curr->item == removedItem){ 
     break; //data has been found break loop 
    }else{ 
     //increment loop 
     prev = curr; 
     curr = curr->next; 
    } 
}//end while 
    //data has not been found 
if(curr == NULL){ 
     cout << "RICK JAMES"; 
}else{ 
    //data has been found delete data 
     // case 1: delete at head node 
    if(head == curr){ 
      head = head->next; 
    }else{ 
     // case 2: delete after head 
      prev->next = curr->next; 
     } 
       delete curr; 
       size--; 
      return true; 
    } 
} 
    return false; 
    } 

回答

0

功能邏輯看起來不錯,我...

如果您收到「裏克詹姆斯」所有的時間,這意味着它無法找到要刪除的節點 - 可能是什麼毛病你比較節點與函數的參數值的方式......

函數接受

ListItemType & removedItem

這似乎有點奇怪的int數據類型,但我不知道如何在ListNode中定義的「項目」字段...我建議仔細檢查這一點。祝你好運!

+0

因此我擺脫了ListItem類型,並且現在在我的節點的結構中有int項目,並且我刪除了if(curr == NULL)語句並在循環中的該點打印出curr-> item的值並發現它正確循環並且不刪除該值。除了刪除它應該結束的值之外,它會繼續,現在我得到一個未處理的execption NULL引用異常,對象引用未設置爲ojbect的實例。 –

+0

所以在調試器中,我發現prev-> next = curr-> next;是導致我崩潰的線,但我不知道爲什麼 –

+0

uggg。所以我得到它的工作,所有我需要的是一個返回語句後 –