コードは問題ないように見えますが、while条件を少し変更することをお勧めします
while(prevNode != currentNode && prevNode != NULL)
2つの理由で
- 現在述べているように、探しているノードがまたはのいずれかでポイントされている場合、コードが停止する可能性があります(したがって、2つのポイントのどちらを指している
prevNodeのprevNode->linkかわかりませんcurrentNode-知りたい場合は、条件で確認してくださいif)。上記の変更により、ターゲットノードはに保存されることが保証されますprevNode(あるとしても、次のポイントを参照してください)。
prevNode安全のために、そうでないことを確認することをお勧めしNULLます。ただし、Pavelが言及しcurrentNodeているように、リストに含まれることが保証されている場合、このテストは不要です。
コメントに応じて編集する
currentNodeがであるprevNodeか、であるかを知る必要がなくprevNode->link、(可能であれば)で停止したいのでcurrentNode == prevNode->link、オリジナルwhileは問題ありません。でも...
prevNodeコードの上位にifステートメントがあり、すでにnullになるのを防ぎ
ます
なぜチェックする必要があるのかという点を見逃しているようですNULL。NULLはい、それは前にチェックするのは良いことですが、ループでチェックを行う理由は、リストにないcurrentNode場合であるため、最終的に最後のノードに到達します。おそらく(他のほとんどのリンクリストのようにこれを行う場合)、最後のノードのの値はです。もしそうなら、あなたの現在のコードは最終的にあなたのプログラムをクラッシュさせるであろう呼び出しをすることになります。だからあなたはまだチェックする必要がありますlinkNULLNULL->linkNULL
while(prevNode != NULL && prevNode != currentNode && prevNode->link!=currentNode)
それがリストに含まれることを絶対に確信しているなら、チェックも不要だと思いますが、それは本当に良い習慣です。currentNode