Advertisement
deced

Untitled

Mar 7th, 2021
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.50 KB | None | 0 0
  1. using System;
  2.  
  3. namespace MyList
  4. {
  5.     public class Node<T>
  6.     {
  7.         public Node<T> Next { get; set; }
  8.         public T Value { get; set; }
  9.  
  10.         public Node(T value)
  11.         {
  12.             Value = value;
  13.         }
  14.     }
  15.     public class MyList<T>
  16.     {
  17.         private const string MsgError =
  18.             "Index was out of range. Must be non-negative and less than the size of the collection. ";
  19.  
  20.         private Node<T> _head;
  21.         private int _count;
  22.  
  23.         public int Count
  24.         {
  25.             get => _count;
  26.         }
  27.  
  28.         public T this[int index]
  29.         {
  30.             get
  31.             {
  32.                 if (index >= Count || index < 0)
  33.                     throw new ArgumentOutOfRangeException(
  34.                         MsgError);
  35.  
  36.                 Node<T> ret = _head;
  37.                 for (int i = 0; i < index; i++)
  38.                 {
  39.                     ret = ret.Next;
  40.                 }
  41.  
  42.                 return ret.Value;
  43.             }
  44.             set
  45.             {
  46.                 if (index >= Count || index < 0)
  47.                     throw new ArgumentOutOfRangeException(
  48.                         MsgError);
  49.  
  50.                 Node<T> ret = _head;
  51.                 for (int i = 0; i < index; i++)
  52.                 {
  53.                     ret = ret.Next;
  54.                 }
  55.  
  56.                 ret.Value = value;
  57.             }
  58.         }
  59.  
  60.         public void Clear()
  61.         {
  62.             _head = null;
  63.             _count = 0;
  64.         }
  65.  
  66.  
  67.         public void RemoveAt(int index)
  68.         {
  69.             if (index >= _count || index < 0)
  70.                 throw new ArgumentOutOfRangeException(
  71.                     MsgError);
  72.  
  73.             if (index == 0)
  74.             {
  75.                 _head = _head.Next;
  76.             }
  77.             else
  78.             {
  79.                 Node<T> node = _head;
  80.  
  81.                 for (int i = 0; i < index - 1; i++)
  82.                 {
  83.                     node = node.Next;
  84.                 }
  85.  
  86.                 node.Next = node.Next?.Next;
  87.             }
  88.  
  89.             _count--;
  90.         }
  91.  
  92.         public void Add(T value)
  93.         {
  94.             if (_head == null)
  95.             {
  96.                 _head = new Node<T>(value);
  97.             }
  98.             else
  99.             {
  100.                 Node<T> temp = _head;
  101.                 while (temp.Next != null)
  102.                 {
  103.                     temp = temp.Next;
  104.                 }
  105.  
  106.                 temp.Next = new Node<T>(value);
  107.             }
  108.  
  109.             _count++;
  110.         }
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement