2015-11-05 3 views
0

Мне нужно написать программу, которая вставляет строки в порядок, например, когда я вставляю собаку и кошку, независимо от того, в каком порядке я их вставляю, она должна возвращать кошку, собаку. На данный момент, когда я делаю это, он не вставляется в порядке, он вставляется точно так же, как и в обычном режиме. Я почти уверен, что мой метод переключения головы и текущего работает, потому что раньше он будет переворачивать мои данные, независимо от того, предполагалось это или нет. Если бы это была собака кошки, она вернула бы собаку. По какой бы то ни было причине он попадает в мое заявление if, это почти похоже на то, что он пропускает его. Любые советы будут очень признательны.Упорядоченная вставка в соответствующий список

public void insert(String s){ 
    head= new node(s,head); 
    node current=head.getNext(); 
    if(current == null){ 
     current=head; 
     while(current.getNext() != null){ 
      if(current.getData().compareTo(s)>0){ 
       current.setNext(head); 
       head.setNext(current.getNext().getNext()); 
       head=current; 
       current=head; 
      } 
      current= current.getNext(); 
     } 
    }else{ 
     while(current.getNext() != null){ 
      if(current.getData().compareTo(s)>0){ 
       current.setNext(head); 
       head.setNext(current.getNext().getNext()); 
       head=current; 
       current=head; 
      } 
      current=current.getNext(); 
     } 
    } 
} 

ответ

0

Вы можете отсортировать список, используя java.util.Collections класс Ex:

Collections.sort(your_list); 
+0

Я мог бы, но честно, это назначение hw, и нам не разрешено. – Haukka

0

Есть несколько проблем с вашим кодом и логикой. Я дам подсказки для крепления ниже

  1. Everytime вы называете вставки создать новый head для списка (я полагаю поле вашего класса). это не так, как работают связанные списки. Вы должны только создать новый head когда head является null (пустой список)

  2. Вы устанавливаете current к следующему узлу после вновь созданного head. Поэтому он будет иметь любое значение, назначенное ему конструктору node. Если он присваивает значение по умолчанию null, вы никогда не попадете в другую часть оператора if.

  3. Согласно выше, вы неизбежно получите в первую, если заявление, где вы переназначить current от null к head. Затем вы в основном сравниваете данные (String) одного и того же узла (head), и вы никогда не получите в следующем, если.

Так в основном функция, которую вы написали, что эквивалентно этому (попробовать)

public void insert(String s) { 
    head = new node(s, head); 
    node current = head.getNext(); 
} 

Что, вероятно, не то, что вы хотели. Начните изменять свой код, создав только head, когда он равен нулю, а затем возвратитесь после этого (если в списке только один элемент, нет необходимости менять его). Затем вставьте новый узел после заголовка и замените его, если необходимо.

+0

Что делать с текущим? Я немного запутался в этой части. – Haukka