私はこの仕事で輪になって回っているようです。それを引き出すことでさえ、私に実用的な解決策を与えていないようです。誰かが私の思考プロセスがここで崩壊する場所を見つけるのを手伝ってもらえますか?
// method receives node ins to be inserted
// and node prev in front of which ins should be inserted
public void insertIntermediate(DLLNode ins, DLLNode prev)
{
ins.pred = prev ; // update node ins' predecessor information
ins.succ = prev.succ ; // update node ins' successor information
prev.succ = ins ; // update list's information
prev.succ.pred = ins ; // update list's information
}
[EDIT2](混乱を減らすためにedit1を削除しました)
@ Andrew、わかりました。わかりました。上記の問題は3行目と4行目の順序でした。
3行目でprev.succ.predにアクセスできなくなりました。
2行を入れ替えることで、その問題を解決しました。ヒントをありがとう!
アドオンの質問:
しかし、別の奇妙な問題に遭遇しました。そのため、解決策を見つけるのに多くの時間を失いました。既存の要素を再度挿入すると、何らかの理由で、印刷時にすべてが無限ループに陥ります...例:
myList.addBeforeFirst(B) ;
myList.addBeforeFirst(B) ;
ループが発生しますが、次のようになります。
myList.addBeforeFirst(B) ;
myList.addBeforeFirst(C) ;
正常に動作します
方法は次のとおりです。
public void addBeforeFirst(DLLNode ins)
{
ins.succ = first ;
ins.succ.pred = ins ;
first = ins ;
}
およびノード:
DLLNode B = new DLLNode("Hi", null, null) ;
DLLNode C = new DLLNode("Salut", null, null) ;
なぜそれが起こっているのですか?