Это правильная визуализация LinkedList? - PullRequest
4 голосов
/ 30 апреля 2020

Я сейчас изучаю Linked List, я рассмотрел некоторые вопросы здесь в stackoverflow, geeksforgeeks, и я просто хочу уточнить, правильное ли мое понимание. Также у меня есть несколько вопросов после того, как я покажу свою визуализацию.

Вот простая java программа для представления связанного списка

public class LinkedList {
    Node head;
    public static void main (String [] args){
        LinkedList list = new LinkedList();
        list.head = new Node(1);
        Node second = new Node(2);
        Node third = new Node(3);

        list.head.next = second;
        second.next = third;
    }
}

class Node{
    int data;
    Node next;

    Node(int d){
        data = d;
        next = null;
    }
}

Это создаст LinkedList (1,2,3)

Из того, что я понимаю, приведены шаги по созданию LinkedList, исправьте меня, если я ошибаюсь

  1. У вас есть 2 класса class LinkedList и class Node
  2. Внутри class LinkedList Я объявил объект, который можно использовать позже, который Node head;
  3. Внутри class Node есть другое объявление объекта Node next; и конструктора, который будет принимать данные (которые я создал набор узлов)
  4. Возвращаясь к class LinkedList Я создаю экземпляр object list, который будет контейнером для узлы, так что это как объект class Node внутри объекта class LinkedList

Вот моя визуализация: enter image description here

Мои вопросы:

  1. Почему я не могу просто создать голову как Node head = new Node(1); вместо Node head;
  2. И, наконец, почему я должен объявить Node next; внутри конструктора Node и почему я должен установить значение next = null;?

Ответы [ 2 ]

1 голос
/ 01 мая 2020
  1. Вы можете создать новый узел, используя Node head = new Node(1);, просто они представляли, как выглядит Единый связанный список.
  2. Да
  3. Три узла были выделены динамически, поэтому значение по умолчанию next = null;, потому что позже вы свяжете каждый узел с: llist.head.next = second; second.next = third

Вот полное представление:

     /* Start with   the empty list. */
     LinkedList2 llist = new LinkedList2(); 

     llist.head = new Node(1); 
     Node second = new Node(2); 
     Node third = new Node(3); 

     /* Three nodes have been allocated dynamically. 
       We have references to these three blocks as head,   
       second and third 

       llist.head        second              third 
          |                |                  | 
          |                |                  | 
      +----+------+     +----+------+     +----+------+ 
      | 1  | null |     | 2  | null |     |  3 | null | 
      +----+------+     +----+------+     +----+------+ */

     llist.head.next = second; // Link first node with the second node 

     /*  Now next of the first Node refers to the second.  So they 
         both are linked. 

      llist.head        second              third 
         |                |                  | 
         |                |                  | 
     +----+------+     +----+------+     +----+------+ 
     | 1  |  o-------->| 2  | null |     |  3 | null | 
     +----+------+     +----+------+     +----+------+ */

     second.next = third; // Link second node with the third node 

     /*  Now next of the second Node refers to third.  So all three 
         nodes are linked. 

      llist.head        second              third 
         |                |                  | 
         |                |                  | 
     +----+------+     +----+------+     +----+------+ 
     | 1  |  o-------->| 2  |  o-------->|  3 | null | 
     +----+------+     +----+------+     +----+------+ */
1 голос
/ 30 апреля 2020
  1. Вы, кажется, путаете идею создания головы (new Node(1)), назначения ее (оператор =) и объявления ее (Node head;) , Вашему определению класса требуется только объявление этой переменной экземпляра, при этом конструктор обрабатывает создание и назначение этого объекта.

  2. Цель класса Node состоит в том, чтобы содержать оба значения и ссылка на следующий объект. Следовательно, нет никакой причины рассматривать ваш класс LinkedList как контейнер для всех объектов Node в этом списке, как для других типов списков.

  3. next = null; не требуется , поскольку null является значением по умолчанию переменной экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...