我正在從迭代刪除功能,從鏈表中刪除節點,我認爲代碼應該工作正常,它遍歷列表,找到所需的節點,指向頭到下一個節點,並刪除當前,但是當我試運行它,我得到無限循環,可以請你幫我查明錯誤,這裏是功能:從鏈接列表中刪除節點
typedef struct E_Type * List;
struct E_Type
{
int data;
struct E_Type* next;
};
功能:
bool erase(List & l, int data){
List head = l;
if (l != 0){
for(List current = head; current; current = current->next){
if (current->data == data)
head = current->next;
delete current;
return true;
}
}
return false;
}
測試程序:
int main()
{
List l = 0;
cout << boolalpha << l->data << "went well? "<< (insert(l,73)) << endl;
cout << boolalpha << l->data << "went well? "<< (insert(l,24)) << endl;
print(cout,l);
cout << boolalpha << "Is deleted 24? "<<(erase(l,24)) << endl;
cout << boolalpha << "Is deleted 35? "<<(erase(l,35)) << endl;
print(cout,l);
cout << endl;
return 0;
}
插入:
bool insert(List & l, int data)
{
List current = l;
while(current != 0) {
if (current->data == data)
return false;
current = current->next;
}
if (l == 0 || l->data > data){
List new_list = new E_Type;
new_list->data = data;
new_list->next = l;
l = new_list;
return true;
}
else if(l->data < data){
insert(l->next, data);
return true;
}
}
什麼是List類型? –
對不起,我忘了粘貼typedef,現在它在那裏 – EmilDo
我在'erase'中看到第二個'if'語句後面沒有''''。這看起來是無意的;你有多個語句縮進後面。嘗試將這些語句括在大括號中。 (仍然有錯誤,但看起來像是一個大問題,看起來像是無條件地刪除了第一個條目。) – cHao