2012-04-11 2 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

Вы пробовали переходить через ваш код с помощью отладчика, чтобы узнать, что происходит? –

ответ

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); 
Смежные вопросы