我想在一个双向链接列表的中间插入一个Node。这是我的实现 我的默认参数是待插入节点之前的节点。
public class DListNode{
public DListNode prev,next;
public Object item;
public DListNode(Object i,DListNode n,DListNode p){
prev=p;
next=n;
item=i;
}
public DListNode(Object i){
this(i,null,null);
}
}
public void insertAfter(Object e,DListNode firstNode) throws UnderFlow{
if(isEmpty()||(head==tail))
throw new UnderFlow("need at least two nodes");
else{
DListNode v=firstNode.next;
DListNode k=new DListNode(e,v,firstNode);
firstNode =k;
v.prev=k;
}
}
public static void main (String args[]) throws UnderFlow{
DList d=new DList();
d.insertFront("d");
d.insertFront("b");
d.insertAfter("c",d.head);
System.out.println(d.toString());
}
虽然我看不出我犯了哪个错误但它只打印出b,d。
c未插入中间。
请有人指出我犯错的地方
答案 0 :(得分:1)
我建议您使用具有某种含义的变量名称。您的k
,v
等名称很难理解
而不是firstNode =k;
应该是firstNode.next =k;
,但最好用专有名称重写。喜欢这个
DListNode next=firstNode.next;
DListNode newOne=new DListNode(e,next,firstNode);
firstNode.next =newOne;
next.prev=newOne;