@Lisik

Как устанавливается head.Next при добавлении элемента в односвязном списке?

Вот у нас есть класс, описывающий элемент списка:
class Node
{
    public int data;
    public Node next;
    public Node(int d)
    {
        data = d;
        next = null;
    }
}


И есть метод добавления нового элемента в список:
class Solution
{
    static Node tail;
    static Node head;
    public static Node Add(int data)
    {
        Node node = new Node(data);

        if (head == null)
        {
            head = node;
        }
        else
        {
            tail.next = node;
        }
        tail = node;
            
        return tail;
    }
}


Так вот, в методе добавления мы никак не указываем элементу head.Next кто он такой, но при выполнении строчки
tail.next = node;
вместе с tail.Next устанавливается и head.Next. Почему так происходит? Ведь это 2 разные переменные.
  • Вопрос задан
  • 21 просмотр
Решения вопроса 1
@none7
С чего вдруг это разные переменные? Node это класс, то есть ссылочный тип. После первого выполнения метода Add, head и tail ссылаются на один и тот же объект(назовём его #1) head == #1 && tail == head. После второго запуска head == #1 && tail == #2 && head.next == tail. После третьего head == #1 && tail == #3 && head.next == #2 && head.next.next == tail. Переменная tail.next == null всегда, что позволяет находить конец списка начав перечисление с любой точки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы