2016-06-30 3 views
-1

Я работаю над методом, который вставляет указанный элемент в нужное положение в отсортированном списке, и я могу вставить один и тот же элемент несколько раз. Однако мой метод не вставлял элемент, и я мог бы Не поймите, почему он не вставляет весь элемент в правильное положение! это мой кодВставка в отсортированный узел

+1

Пожалуйста, введите код в правильном формате с отступом. –

ответ

0

Кажется, что вы вставляете новый товар только в том случае, если current равно null. Но когда взгляд ближе в приведенном выше цикле, цикл может выйти и current не является нулевым (если первый)

так, если first if правда элемент не попасть в linked list

0
else{ //insert into sorted list 
     Node d=new Node(element); 
     Node current = head; 
     Node pre=null; 
     while(current!=null){ 
      if(c.compare(current.item, element)>0){ 
       break; 
      } 
      else{ 
       pre=current; 
       current=current.next; 
      } 
     } 
     if(current == null && pre!=null){ //insert new tail 
      pre.next=d; 
      tail=d; 
      d.pre=pre; 
      size++; 
      return this; 
     } 
     else { //insert when compare is successful and node not at tail. 
      d.pre = pre; 
      pre.next = d; 
      current.pre = d; 
      d.next = current; 
      return this; 
     } 
    } 
+0

Я отредактировал свой ответ, чтобы поставить оператор return, –

0

Если вы ищу способ, чтобы создать отсортированный список, который может иметь несколько элементов, я бы рекомендовал создать класс

public class SortedList<E> extends AbstractSequentialList<E> { 

} 

и осуществление необходимых операций. Вы можете посмотреть Collections.sort(), если вы хотите сначала отсортировать список. После этого, всякий раз, когда вы вставляете или удаляете из списка, вы можете выполнить двоичный поиск, чтобы найти правильное местоположение.

Другой идеей было бы создать класс

public class Multiplicity<E> { 
    private E value; 
    private int numberOfDuplicates; 
    // etc. etc. 

тогда, вы могли бы вместо того, чтобы просто использовать SortedSet<Multiplicity<E>> и вместо того, чтобы вставить элемент, который уже есть или удаление один, вместо этого, вы увеличить или уменьшить значение счетчика.

Смежные вопросы