Проблемы с пониманием реализации связанного списка

Обновление: Большое спасибо всем, кто ответил !!! Это заставило меня почувствовать, что я не совсем одинок в своих усилиях по изучению Java. Пожалуйста, извините меня, но я полагаю, я недостаточно разъяснил, чего я не понимаю о связанных списках и приложении упражнений - сначала

- как определение класса может содержать объект самого себя, хорошо, я знаю, что это рекурсия но для меня это все еще очень странное и чуждое понятие.

второй - как именно объект связанного списка может «связываться» с другим узлом?

третий - если два объекта разделены знаком равенства, это означает, что второй объект исчезает, а то, что от него остается, - это " name ", который теперь указывает на первый объект или наоборот?

тогда - то, что я не понимаю о программе, которую я цитирую ниже, заключается в следующем: после создания экземпляра класса linkList вызывается конструктор, и он дает объект класса Link private Link сначала значение null, то есть устанавливает его ни на что не указывающее. Затем, когда создается первый новый узел, вызывается метод public void insertFirst, он передает значения объекта своим переменным, а затем происходит что-то абсурдное - объект, который первым ни на что не указывает, назначается новому элементу, таким образом, оба объекта указывают на ничего и с первым = newLink; Я совсем потерялся ...

Я изучаю в колледже курс по алгоритмам и структурам данных, и, поскольку профессор действительно груб и его объяснения бесполезны, я пытаюсь выучить самостоятельно из книги Роберта Лафора «Алгоритмы и структуры данных».

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

Link.java:

class Link
   {
   public int iData;              // data item
   public double dData;           // data item
   public Link next;              // next link in list

   public Link(int id, double dd) { // constructor
      iData = id;                 // initialize data
      dData = dd;                 // ('next' is automatically
      }                           //  set to null)

   public void displayLink() {     // display ourself
      System.out.print("{" + iData + ", " + dData + "} ");
      }
   }

LinkList.java:

class LinkList {
   private Link first;            // ref to first link on list

   public LinkList() {             // constructor
      first = null;               // no links on list yet
      }

   public boolean isEmpty() {      // true if list is empty
      return (first==null);
      }
                                  // insert at start of list
   public void insertFirst(int id, double dd) { // make new link
      Link newLink = new Link(id, dd);
      newLink.next = first;       // newLink --> old first
      first = newLink;            // first --> newLink
      }

   public Link deleteFirst() {     // delete first item
      // (assumes list not empty)
      Link temp = first;          // save reference to link
      first = first.next;         // delete it: first-->old next
      return temp;                // return deleted link
      }

   public void displayList() {
      System.out.print("List (first-->last): ");
      Link current = first;       // start at beginning of list
      while(current != null)      // until end of list,
         {
         current.displayLink();   // print data
         current = current.next;  // move to next link
         }
      System.out.println("");
      }
   }

LinkListApp.java:

class LinkListApp {
   public static void main(String[] args) {
      LinkList theList = new LinkList();  // make new list

      theList.insertFirst(22, 2.99);      // insert four items
      theList.insertFirst(44, 4.99);
      theList.insertFirst(66, 6.99);
      theList.insertFirst(88, 8.99);

      theList.displayList();              // display list

      while( !theList.isEmpty() ) {        // until it's empty,
         Link aLink = theList.deleteFirst();   // delete link
         System.out.print("Deleted ");         // display it
         aLink.displayLink();
         System.out.println("");
         }
      theList.displayList();              // display list
      }
   }

Я просто НЕ МОГУ понять код, который вставляет и отображает элементы в классе связанного списка.

Как такое может быть, что newLink.next = first; и first = newLink; после создания нового объекта?

Пожалуйста, помогите!

5
задан Rajaah 10 January 2018 в 12:04
поделиться