2017-07-30 55 views
0

我需要遍歷單鏈表並查找否定節點,刪除它們並返回刪除節點的數量。在SLL中查找負值

這是代碼我有這麼遠,但我總是計數器= 1從功能

返回這有什麼錯在for循環和if語句,或者是別的東西

bool IntSLList::DeleteNegativeNodes() 
{ 
int counter=0; 
if(IsEmpty() == true) 
    counter++; 

if(head->val<0) 
{ 
    DeleteFromHead(); 
    counter++; 
} 

if(tail->val<0) 
{ 
    DeleteFromTail(); 
    counter++; 
} 


IntSLLNode *node, *pred, *tmp; 
node = pred = NULL; 


for(pred = head, node = head->next; 
    node != NULL; 
    node = node->next, pred = pred->next) 
{ 
    if(node->val<0) 
    { 
     node->flag = 1; 

    } 
} 
for(tmp = head; tmp != NULL; tmp = tmp->next) 
{ 
    if(tmp->flag==1) 
    counter++; 
    delete tmp; 


} 
return counter; 
} 

int main() 
{ 
int n,x,z; 
IntSLList list1; 


cout <<"Insert number of nodes u'd like inserted in list" << endl; 
cin >> n; 

for(int i=0;i<n;i++) 
{ 
    cin >> x; 
    list1.AddToTail(x); 
} 
z=list1.DeleteNegativeNodes(); 

cout << "Number of negative deletes nodes is : " << z << endl; 

} 
+0

也許使計數器靜態或全局變量將有所幫助,但是如果你在同一個程序中多次使用它,你不得不重新初始化它。 – monster

+0

'DeleteNegativeNodes'刪除列表中的所有節點,並用' tmp-> flag == 1' at'for(tmp = head' ...'loop。你在'if'語句中忘了'{}' – Nikita

+0

沒有改變任何東西,我仍然得到「Number of negative刪除節點是:1「 –

回答

1

問題在於返回值的類型。檢查方法的簽名:

bool IntSLList::DeleteNegativeNodes() 

返回類型是bool那裏。當您從您的方法中返回intcounter時,它的編號爲implicitly convertedbool。零值變成false。所有其他值變爲true

在呼叫者一側:

z=list1.DeleteNegativeNodes(); 

bool值被隱式轉換爲int。因爲它你得到1

將返回類型DeleteNegativeNodes更改爲int以解決該問題。

+0

我不能相信我讓我跳過了我的想法。我已經重新編程了我的DeleteNode,這就是爲什麼我有這個事件。非常感謝你把我的張力。 –

+0

@HananSammour很高興幫助。如果答案已解決您的問題,請點擊複選標記考慮[接受](https://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明您已找到解決方案。 – Nikita

0

在第二你有

if(tmp->flag==1) 

而且我認爲你必須使用

if(node->flag==1) 
+0

我正在使用與節點tmp不同的循環穿過它 –