2014-05-13 4 views
-1

Voici mon code pour ajouter un nœud au début d'une liste doublement chaînée.Insertion au début d'une liste doublement chaînée

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

}  

Voilà ma classe 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); 
    } 
} 

Ma question est après l'insertion à l'avant ce qu'il imprime est c, b c pas, a, b.
Qu'arrive-t-il au noeud avec l'élément a? Est-ce un problème avec ma méthode toString qu'il ne s'imprime pas ou est-ce un problème avec insertFront().
Je ne vois pas où je fais un mistake.So toute aide à corriger ce serait vraiment utile

+1

Correction it.Though Je voulais insérer avant la tête i insérait Au milieu du nœud de tête et le suivant. Pourquoi une impression n'était pas à cause de la ligne 'head = v;'. Je pointe le nouveau nœud vers la tête et supprimait le nœud avec l'élément a de la liste. insertFront corrigé les insertions en tête sont: public void insertFront (Object e) { \t \t if (isEmpty()) { \t \t \t head = nouveau DListNode (e, null, head); \t \t} \t \t else if (tête == queue) { \t \t \t tête = new DListNode (e, null, la tête); \t \t} \t \t else { \t \t \t tête = new DListNode (e, tête, null); \t \t \t \t \t \t}} ' \t –

Répondre

-1

Essayez plutôt

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