我似乎在这个任务的圈子。即使画出来似乎也没有给我一个工作的解决方案。有人能帮我找到我的思维过程在哪里崩溃吗?将中间节点插入双向链表[如何]
// 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。
通过交换两条线我解决了这个问题。感谢提示!
ADD-ON问题:
我碰到虽然另一个奇怪的问题,这就是为什么我失去了这么多的时间来寻找解决方案:如果我再重新插入一个已经存在的元素,由于某种原因,整个事情进入无限循环,当我打印它 ...例如
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) ;
为什么会这样呢?
对我来说,似乎我涵盖了所有四个链接:2之间prev和插件(前进和后退)和2之间插件和prev.succ(前进和后退),所以不知道缺少什么? – raoulbia 2011-03-21 22:28:39
@Baba我会编辑我的答案,因为这可能会有点冗长的评论。 – Andrew 2011-03-21 22:35:15
嗨安德鲁,看我的编辑 – raoulbia 2011-03-21 23:05:20