Почему значение head.next не равно нулю в следующем коде? - PullRequest
0 голосов
/ 14 октября 2019

У меня путаница в следующем коде: -

Класс Node: -

class Node
{
  int data;
  Node next;
  Node(int n)
  {
    data=n;
    next=null;
  }
}

Класс LinkedList: -

class LinkedList
{
  Node head;
  void insertLinkedList(int n)
  {
    Node newNode=new Node(n);
    if(head==null)
    {
      head=newNode;
    }
    else
    {
      Node ptr=head;
      while(ptr.next!=null)
      {
        ptr=ptr.next;
      }
      ptr.next=newNode;
    }
  }

Первоначально head - это ноль. При вызове функции insertLinkedList(1) возникает ситуация: -

newNode.data = 1 newNode.next = null

head.data = 1 head.next = null

После второго вызова функции insertLinkedList(2)Ожидаемая ситуация: -

newNode.data = 2 newNode.next = null

head.data = 2 head.next = null

Но фактическое значение head.next не равно нулю. Вместо этого он хранит ссылку на первый узел.

Может ли кто-нибудь помочь мне лучше понять это?

1 Ответ

1 голос
/ 14 октября 2019

После вставки второго узла ожидаемое значение head.next не равно NULL.

Node ptr=head;

Здесь ptr используется для обозначения головного узла. Поэтому после первой вставки

while(ptr.next!=null)

имеет значение false и не входит в цикл. После выполнения цикла

ptr.next=newNode;

. И он назначает следующее значение головы как ссылку на новый узел. Следовательно, head.next не является нулевым;как и ожидалось.

...