2014-10-05 7 views
2

Я пытаюсь выяснить, как инициализировать текущий список объектов в конструкторе списка, поэтому изначально он не содержит никаких элементов. Как бы это сделать, если бы я хотел использовать односвязный список? Я знаю, что это довольно простой вопрос о списках ха-ха. И как было бы иначе, если бы я хотел использовать двойной связанный список, хвост ссылки, циркулярно-связанный, или фиктивный узел (если это не слишком раздражает, чтобы сделать это для всех из них)Java-односвязный список и конструктор

 public class List<T extends Comparable<T>> implements Iterable<T> { 
      private class Node<D extends Comparable<D>> { 
       private D data; 
       private Node<D> next; 
       } 

ответ

2

Eсть два способа мышления о связанном списке, когда он пришел, чтобы сигнализировать о конце списка (что в основном относится к пустым спискам)

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

Второй - использовать специальный объект (называемый дозорным), который используется как флаг вместо нуля , Это может быть особый узел, который, когда вы получаете данные от него, генерирует исключение. Преимущество состоит в том, что вам не нужно управлять нулевым значением во всем методе, но, возможно, придется управлять исключением.

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

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

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

например:

public class List<T extends Comparable<T>> implements Iterable<T> { 
     private class Node<D extends Comparable<D>> { 
      private D data; 
      private Node<D> next; 
      } 
      Node firstNode; 

      public List(){ 
       firstNode=null; 
      } 

     // other methods 
} 
+0

Не могли бы вы явно показать мне, как я установить узел в нуль в моем конструкторе? –

+0

ну, это просто переменное назначение, но я добавляю его к своему ответу. –

+0

Oooh. Как насчет второго варианта, который вы упомянули? –

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