2014-05-13 127 views
-1

這裏是我的代碼添加一個節點到雙向鏈表的前面。插入一個雙向鏈表

public void insertFront(Object e){ 
     if(isEmpty()){ 
      head=new DListNode(e,null,head); 
     } 
     else if(head==tail){ 
      head=new DListNode(e,null,head); 
     } 
     else{ 
      DListNode tmp=head.next; 
      DListNode v=new DListNode(e,head.next,head); 
      head=v; 
      tmp.prev=v; 
      } 
    } 


public void addToTail(Object e){ 
    if(!isEmpty()){ 
     tail=new DListNode(e,null,tail); 
     tail.prev.next=tail; 
    } 
    else 
     head=tail=new DListNode(e); 
} 
public String toString(){ 
    DListNode a=head; 
    String result=" "; 
    if(!isEmpty()){ 
     while(a.next!=null){ 
      result+=" " +a.item; 
      a=a.next;} 
     result+=" "+a.item; 
    } 

    return result; 
} 
public static void main (String args[]) throws UnderFlow{ 
    DList d=new DList(); 
    d.addToTail("a"); 
    d.addToTail("b"); 
    d.insertFront("c"); 
    System.out.println(d.toString()); 

}  

這裏是我的DListNode類:

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); 
    } 
} 

我的問題是插入到它打印出前方後是C,B不是C,A,B。
使用item a的節點會發生什麼?對於我的toString方法,它是不是打印出來的問題,還是insertFront()的問題。
我不能看到我想提出一個mistake.So任何幫助糾正,這將是很有益的

+1

更正it.Though我想插入頭部之前,我將在頭節點和下一個節點的中間。爲什麼a沒有打印是因爲'head = v;'這一行。我指着新節點成爲頭,並且正在從list.orrected insertFront刪除節點a的節點在頭部插入的是:'public void insertFront(Object e){ \t \t if(isEmpty()){ \t \t \t head = new DListNode(e,null,head); \t \t} \t \t否則如果(頭==尾){ \t \t \t頭=新DListNode(E,空,頭); \t \t} \t \t否則{ \t \t \t頭=新DListNode(E,頭,NULL); \t \t \t \t \t \t} \t}' –

回答

-1

試試這個

DListNode tmp=head.next; 
DListNode v=new DListNode(e,head.next,head); 
head=v; 
head.next = tmp;