2015-05-16 3 views
0

Итак, у меня есть класс под названием List и класс с именем SortedList, который наследует класс List. Также есть класс, называемый узлом. Я создал другой класс, который содержит метод печати.Как реализовать отсортированный список

Но каждый раз, когда я вставляю три имени, и я вызываю метод печати, он только печатает фамилию, которую я вставил. Поэтому мой вопрос: делает ли этот код отсортированным списком? И если да, то почему он печатает только фамилию?

класс

Список:

public class List { 

    protected Node head; 
    protected int length; 

    public void list() 
    { 
     head=null; 
     length=0; 
    } 
    public boolean isEmpty() 
    { 
     return head==null; 
    } 
    public Node insert(Item a) 
    { 
     length++; 
     head=new Node(a, head); 
     return head; 
    } 

список сортировки класс:

public class SortList extends List { 

    private Node head; 
    public SortList() 
    { 
     this.head=null; 
    } 
    public Node getFirst() 
    { 
     return head; 
    } 
    public Node Insert(Item newitem) 
    { 
     Node node = new Node(newitem); 
     Node previous = null; 
     Node current = head; 
     while(current!=null && current.getValue().less(newitem)) 
     { 
      previous=current; 
      current=current.getNext(); 
     } 
     if(previous==null) 
     { 
      head=node; 
     } 
     else 
     { 
      previous.setNext(node); 
      node.setNext(current); 
     } 
     return head; 
    } 
    public void printlist() 
{ 

    Node current = head; //ΑΡΧΗ ΤΗΣ ΛΙΣΤΑΣ. 
    while(current!=null) 
    { 
     current.print(); 
     current = current.getNext(); 
    } 
} 

Node Класс:

public class Node { 

    private Item info; 
    private Node next; 
    public Node(Item dat) 
    { 
     info=dat; 
    } 
    public Node (Item dat, Node b) 
    { 
     info=dat; 
     next=b; 
    } 
    public Item getValue() 
    { 
     return info; 
    } 
    public void setNext(Node a) 
    { 
     next=a; 
    } 
    public Node getNext() 
    { 
     return next; 
    } 
    public void print() 
    { 
     info.print(); 
    } 
} 
+0

Я сделал, как вы просили. – Maria

+0

@ ᴳᵁᴵᴰᴼ Вы ... должны ... использовать ... Python ...! Не ... JAVA! – Zizouz212

+0

Почему вы не можете использовать 'Collections.sort()' при каждом изменении содержимого списка? –

ответ

3

В вашей реализации List, у вас есть серьезная ошибка в методе insert():

public Node insert(Item a) 
{ 
    length++; 
    head=new Node(a, head); 
    return head; 
} 

Вы не добавляете новый элемент в конец списка, а заменяете его каждый раз, отбрасывая предыдущий элемент.

Это объясняет, почему вы всегда видите только последний элемент, который вы вставили.

Редакция: Оказывается, метод insert() действительно работает, поскольку вы устанавливаете ссылку на следующий узел в конструкторе узла.

В вашем отсортированный список, однако, у вас есть один случай вставки, для которого следующий узел не установлен:

if(previous==null) 
{ 
    head=node; 

} 

я ваш отсортированный список, вы не установите следующий элемент в конструктор узла , Во всех остальных случаях вы устанавливаете следующий элемент в методе insert(), но не в этом случае. Если элемент, который вы хотите вставить, является самым маленьким в списке, previous имеет значение NULL, что является правильным - ваш новый элемент является новым head списка. Однако, поскольку вы не устанавливаете преемника нового элемента, все элементы, которые были в списке, теперь исчезли.

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

установки преемника Try:

if(previous==null) 
{ 
    head=node; 
    head.setNext(current); 
} 
+0

mmh, голова, возможно, должна быть переименована в хвост ... но она все равно должна работать, потому что ссылка не отбрасывается, текущая головная ссылка будет следующей для новой головы –

+0

Хорошо, я понимаю, что вы говорите, но можете ли вы быть более конкретным ? Можете ли вы привести мне пример или правильный код? – Maria

+0

@ ᴳᵁᴵᴰᴼ на самом деле прав, ваш код должен работать. Я просто пропустил, что ссылка на следующий элемент задана внутри конструктора нового 'Node'. Моя вина! – Timo

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