@coolfusion

Пример реализации односвязного списка на C#, Не понятно откуда берется свойство Netx Объекта Head?

Есть следующий код, связанный список. Все работает правильно, но почему ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    internal class Node
    {
        public int Value { get; set; }
        public Node Next { get; set; }

    }

    internal class LinkList
    {
        public void Push(int value)
        {
            Size++;
            var node = new Node() {Value = value};
            if (Head == null)
            {
                Head = node;
            }
            else
            {
                Current.Next = node;
            }
            Current = node;

        }

 
        public void ListNodes()
        {
            Node tempNode = Head;

            while (tempNode != null)
            {
                Console.WriteLine(tempNode.Value);
                tempNode = tempNode.Next;
            }
        }

        public int this[int position]
        {
            get
            {
                Node tempNode = Head;
                for (int i = 0; i < position; ++i)
                    // переходим к следующему узлу списка
                    tempNode = tempNode.Next;
                return tempNode.Value;
            }
        }
        private Node Head { get; set; }
        private Node Tails { get; set; }
        private Node Current { get; set; }
        private Node Current1 { get; set; }
        private int Size { get; set; }
    }
    class Program
    {
        private static void Main(string[] args)
        {
            var node = new LinkList();
            node.Push(1);
            node.Push(2);
            node.Push(3);
            node.Push(4);
            node.Push(9);
            node.ListNodes();
            Console.ReadKey();
        }
    }
 
}


Не могу понять эту часть кода. Как получается так, что в Head свойство Next указывает на следующий элемент ? Замыкание ?
var node = new Node() {Value = value};
            if (Head == null)
            {
                Head = node;
            }
            else
            {
                Current.Next = node;
            }
            Current = node;
  • Вопрос задан
  • 7421 просмотр
Решения вопроса 1
Mrrl
@Mrrl
Заводчик кардиганов
Когда список пуст, Current и Head равны null. После добавления первого элемента Current и Head являются одним и тем же объектом, а при добавлении второго срабатывает строчка Current.Next = node; - и в этот момент устанавливается Head.Next (поскольку Current и Head совпадают).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@tplus
В самом начале
Head == null -> Head = node; Current = node. Current указывает на Head.

В следующей итерации Head != null -> Current(=Head).Next = node. Current переводится на node, которая строкой выше была присвоена в бывший на тот момент Current(=Head).Next.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы