2012-04-11 60 views
2

基本上如上所述,我有我自己的雙向鏈表的實現,並且我希望它在添加對象時使用它進行排序compareTo方法。編寫一個添加方法,實現一個雙向鏈表,當我向它添加對象時排序

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

你有沒有試過用調試器來查看你的代碼,看看發生了什麼? – 2012-04-11 23:56:29

回答

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