https://pastein.ru/t/Rj

  скопируйте уникальную ссылку для отправки


namespace Task_1
{
    using System;

    public class Program
    {
        #region Abstract classes


        public interface IListNode<T>
            where T : struct
        {
            T Value { get; set; }

            ListNode<T> Next { get; set; }

            void Insert(T newValue);
        }

        public interface IArray<T>
            where T : IListNode<int>
        {
            void Insert(int newValue);
        }

        public interface IHashTable
        {
            Array<ListNode<int>> Values { get; set; }

            void Insert(int newValue);
        }

        #endregion

        public static void Main(string[] args)
        {
        }


        #region Impliment classes

        public class ListNode<T> : IListNode<T>
            where T : struct
        {
            public T Value { get; set; }

            public ListNode<T> Next { get; set; }

            public void Insert(T newValue)
            {
                Value = newValue;
            }
        }

        public class Array<T> : IArray<T>
            where T : IListNode<int>
        {
            private ListNode<int> firstElement;

            private ListNode<int> lastElement;

            public void Insert(int newValue)
            {
                var node = new ListNode<int>();

                node.Insert(newValue);

                if (firstElement == null)
                {
                    firstElement = node;
                }
                else
                {
                    lastElement.Next = node;
                }

                lastElement = node;
            }
        }

        public class HashTable : IHashTable
        { 
            public Array<ListNode<int>> Values { get; set; }

            public void Insert(int newValue)
            {
            }
        }

        #endregion
    }
}