2015-04-25 2 views
1

Мое объяснение вставки: Я назначил «следующую переменную» хвоста, чтобы удерживать адрес старого узла. Я назначил хвост новым узлом, вставленным в список.Невозможно правильно отобразить узлы списка, начиная с хвоста до головы

Я попытался отобразить список, начиная с хвоста и проходя через список, пока не достигнет головы.

Проблема: Но введенный вход C, который не то, что я хотел. Дисплей должен отображать C, B, A.

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

public static void main(String[] args) 
    { 
     LinkedList list = new LinkedList(); 
     list.insert("A"); 
     list.insert("B"); 
     list.insert("C"); 
     list.display(); 

    } 

public void insert(String data) 
    { 
     Link link = new Link(data); 

     // this code only executes the first time when the list has 
     // no node 
     if(head == null) 
     { 
      head = link; 
      tail= link; 
     } 
     // this code will execute when the linked list has one or more node         
     else 
     { 
      tail.next = tail; 
      tail = link; 

     } 
    } 

    public void display() 
    { 

     while(tail != null) 
     { 
      System.out.println(tail.data); 
      tail = tail.next; 

     } 

    } 
+2

Не должно быть tail.next = link, tail = tail.next? То, что у вас есть, это tail.next = tail, который укажет на ту же ноту и создаст цикл. –

+0

Я проверил ваш код, но связанный список все еще отображает «C.». – Nicholas

+2

в «отображении» вы перебираете элементы в списке? похоже, что вы только печатаете хвост. Первым узлом в вашем связанном списке является голова. – Paxic

ответ

1

Вы создали отдельный список. Список имеет голову и хвост, ссылки от головы до хвоста. Отдельно связанный список по дизайну имеет одно направление «вперед». С элементами [a, b, c] список связан a-> b-> c. Чтобы напечатать элементы в обратном порядке, у вас есть как минимум два варианта. Используйте рекурсию для печати элементов c, b, a или реализации a doubly linked list

+1

Вы можете изменить свою структуру как «обратную» и иметь направление хвоста к голове, но шляпа не будет целесообразной - она ​​идет против зерна, ожидаемое поведение от головы до хвоста. – Paxic

+1

Таким образом, одиночный список должен пересекать только «от головы до хвоста». Но вдвойне вы можете переходить от «головы в хвост» и «хвост к голове». – Nicholas

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