2012-04-11 7 views
2

基本的に述べたように、私は自分自身で二重リンクリストを実装しています。 compareToメソッド二重リンクリストの実装のためのaddメソッドの記述。オブジェクトを追加するときにソートする

public void add(E c) 
{ 
Node<E> finger = head; 
while (finger != null && ((finger.value().compareTo(c)) > 0)) 
    finger = finger.Next(); 


if(finger != null && finger.Next() != null && finger.Previous() != null) 
{ 
    Node<E> n = new Node<E>(c); 
    n.setPrev(finger); 
    n.setNext(finger.Next()); 
    finger.Next().setPrev(n); 
    finger.setNext(n); 
    count++; 
} 
else if(finger !=null && finger.Next() == null && finger.Previous() != null) 
    this.addLast(c); 
else if(finger !=null && finger.Next() != null && finger.Previous() == null) 
    this.addFirst(c); 
else{this.addFirst(c);}  
} 

私はその後

DList<String> DD = new DList<String>(); 
DD.add("d"); 
DD.add("e"); 
DD.add("f"); 
DD.add("a"); 
DD.add("b"); 
DD.add("c"); 
DD.add("g"); 
DD.add("h"); 

for(int i = 0; i < DD.size();i++) 
    System.out.print(DD.get(i)); 

を実行し、出力がhgcbafedされます。

ここで何が間違っていますか?

+1

デバッガでコードをステップ実行して何が起こっているのか確認しましたか? –

答えて

0
Node<E> finger = head; 
if(null == head){ 
    head = new Node<E>(c); 
    return; 
} 

while (finger.next != null && ((finger.value().compareTo(c)) > 0)) 
    finger = finger.Next();  
Node n = new Node<E>(c); 
n.next = finger.next;//n.setNext(finger.getNext(); 
finger.next = n;//finger.setNext(n);