コードは問題ないように見えますが、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
場合であるため、最終的に最後のノードに到達します。おそらく(他のほとんどのリンクリストのようにこれを行う場合)、最後のノードのの値はです。もしそうなら、あなたの現在のコードは最終的にあなたのプログラムをクラッシュさせるであろう呼び出しをすることになります。だからあなたはまだチェックする必要がありますlink
NULL
NULL->link
NULL
while(prevNode != NULL && prevNode != currentNode && prevNode->link!=currentNode)
それがリストに含まれることを絶対に確信しているなら、チェックも不要だと思いますが、それは本当に良い習慣です。currentNode