Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.32 KB | None | 0 0
  1. public class OneWayList<T> : IOneWayList<T>, IEnumerable<T> where T : IComparable
  2.     {
  3.         private Node<T> head;
  4.        
  5.         public IOneWayList<T> Add(T value)
  6.         {
  7.             if (head == null)
  8.             {
  9.                 head = new Node<T>(value);
  10.                 return this;
  11.             }
  12.            
  13.             var currentNode = head;
  14.  
  15.             if (currentNode.Value.CompareTo(value) > 0)
  16.             {
  17.                 head = new Node<T>(value, currentNode);
  18.                 return this;
  19.             }
  20.  
  21.             while (currentNode.Next != null && currentNode.Next.Value.CompareTo(value) < 0)
  22.             {
  23.                 currentNode = currentNode.Next;
  24.             }
  25.  
  26.             // var next = currentNode.Next;
  27.             currentNode.Next = new Node<T>(value, currentNode.Next);
  28.  
  29.             return this;
  30.         }
  31.  
  32.         public IOneWayList<T> Delete(T value)
  33.         {
  34.             var currentNode = head;
  35.  
  36.             while (!currentNode.Next.Value.Equals(value))
  37.             {
  38.                 currentNode = currentNode.Next ?? throw new Exception("Element not found.");
  39.             }
  40.  
  41.             var next = currentNode.Next?.Next;
  42.  
  43.             currentNode.Next = next;
  44.  
  45.             return this;
  46.         }
  47.  
  48.         public int Find(T value)
  49.         {
  50.             var currentNode = head;
  51.             var index = 0;
  52.  
  53.             while (currentNode != null)
  54.             {
  55.                 if (currentNode.Value.Equals(value))
  56.                     return index;
  57.                 index++;
  58.                 currentNode++;
  59.             }
  60.            
  61.             throw new Exception("Element not found.");
  62.         }
  63.        
  64.         public T this[int index]
  65.         {
  66.             get
  67.             {
  68.                 var currentNode = head;
  69.  
  70.                 while (currentNode != null)
  71.                 {
  72.                     if (index == 0)
  73.                     {
  74.                         return currentNode.Value;
  75.                     }
  76.  
  77.                     currentNode = currentNode.Next;
  78.                     index--;
  79.                 }
  80.                
  81.                 throw new IndexOutOfRangeException("Index out of range.");
  82.             }
  83.         }
  84.  
  85.         public void Clear()
  86.         {
  87.             head = null;
  88.         }
  89.  
  90.         public void Print()
  91.         {
  92.             var currentNode = head;
  93.  
  94.             while (currentNode != null)
  95.             {
  96.                 Console.Write(currentNode.Value + " ");
  97.                 currentNode = currentNode.Next;
  98.             }
  99.  
  100.             Console.WriteLine();
  101.         }
  102.  
  103.         public IEnumerator<T> GetEnumerator()
  104.         {
  105.             if (head == null)
  106.                 yield break;
  107.            
  108.             var currentNode = head;
  109.  
  110.             do
  111.             {
  112.                 yield return currentNode.Value;
  113.                 currentNode++;
  114.             } while (currentNode != null);
  115.         }
  116.  
  117.         IEnumerator IEnumerable.GetEnumerator()
  118.         {
  119.             return GetEnumerator();
  120.         }
  121.     }
  122.  
  123. public class Node<T>
  124.     {
  125.         public T Value { get; set; }
  126.         public Node<T> Next { get; set; }
  127.  
  128.         public Node(T value, Node<T> next = null)
  129.         {
  130.             Value = value;
  131.             Next = next;
  132.         }
  133.  
  134.         public static Node<T> operator ++(Node<T> node)
  135.         {
  136.             return node.Next;
  137.         }
  138.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement