我似乎在完成这项任务。即使把它画出来似乎也没有给我一个可行的解决方案。有人可以帮我找到我的思维过程在这里崩溃的地方吗?
// 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。
通过交换两条线,我解决了这个问题。感谢您的提示!
附加问题:
不过,我遇到了另一个奇怪的问题,这就是为什么我浪费了这么多时间来寻找解决方案:如果我再次重新插入一个已经存在的元素,由于某种原因,当我打印它时,整个事情都会进入无限循环......例如
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) ;
为什么会这样?