2016-12-11 6 views
0

こんにちは皆、リンク先のリストから任意の位置からノードを削除しようとしています。ノードを最初から削除することはできます他に何か。リンクされたリストからノードを削除する手助けが必要です。C++

ここに私の削除機能があり、どんな助けでも大歓迎です。

void PartList::removePart(string partNum){ 

Part * walker = firstPointer; 
Part * stalker = NULL; 
while (walker != NULL) 
{ 
    stalker = walker; 
    if (partNum == walker->partNo) 
     break; 
    walker = walker->link; 
} 

    if (walker == NULL) 
    { 
     cout << "Part Number Not Found..." << endl; 
    } 
    else { 
     if(stalker == NULL){ 
      cout << "Not Found.."<< endl; 
     } 
     else { 
      stalker->link = walker->link; 
     } 
    } 
    if (firstPointer->partNo == partNum) 
    { 
     firstPointer = walker; 
     walker->link = NULL; 
    } 
    if (stalker->partNo == partNum) 
    { 
     stalker = NULL; 
     walker->link = NULL; 
    } 
    walker->link = firstPointer; 


     numParts--; 
     delete stalker; 
     stalker = NULL; 

}

+2

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+1

ええ私はブレークポイントとすべての良いものについて知っています。私のことを信じてはいますが、私の最後の手段は、このコミュニティがすべてのことを無駄なく頼りにしてくれる人たちです。私はここのピクルスにいて、コードの答えを探していないが、おそらくちょうど私が私が近くにいることを知っているので、ここで私のロジックがオフになっていることを私に知らせる。 – Gonkoy

+0

'if(stalker-> partNo == partNum)のようなコード { ストーカー= NULL; walker-> link = NULL; } walker-> link = firstPointer; 'は自分自身を燃やします。 –

答えて

1

あなたはより読みやすいコードを記述する必要があります。それは必要以上に複雑です。あなたのリストが正しく構築されていると仮定します。ノードの削除:

Part * walker = firstPointer; 
Part * stalker = NULL; 

if(walker == NULL){ 
    cout << "Empty list" << endl; 

    return; 
} 

while (walker != NULL){ 
    //stalker = walker; //not here! 
    if (partNum == walker->partNo){ 
     if(walker == firstPointer){ //first node 
      //do your stuff, delete walker 
      ... 
      firstPointer = NULL; 
     } 
     else{ 
      stalker->link = walker->link; 
      //do stuff, delete walker 
      ... 
     } 

     return; 
    } 
    stalker = walker; //here! 
    walker = walker->link; 
} 

cout << "Part Number Not Found..." << endl; 
+0

ありがとうございます。それは非常に有益であり、非常に感謝しています。 – Gonkoy

関連する問題