elena1234

Create Linked List

Feb 15th, 2021 (edited)
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.96 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. namespace CreateLinkedList
  6. {
  7.     public class LinkedList : IEnumerable<int>
  8.     {
  9.         public LinkedList()
  10.         {
  11.             this.Head = default;
  12.             this.Tail = default;
  13.             this.Count = 0;
  14.         }
  15.         private class Node
  16.         {
  17.             public Node(int value, Node nextNode)
  18.             {
  19.                 this.Value = value;
  20.                 this.NextNode = nextNode;
  21.             }
  22.  
  23.             public int Value { get; set; }
  24.             public Node NextNode { get; set; }
  25.         }
  26.         private Node Head { get; set; }
  27.         private Node Tail { get; set; }
  28.         public int Count { get; private set; }
  29.  
  30.         public void AddFirst(int element)
  31.         {
  32.             if (this.Count == 0)
  33.             {
  34.                 var newNode = new Node(element, null);
  35.                 this.Head = this.Tail = newNode;
  36.             }
  37.             else
  38.             {
  39.                 var newNode = new Node(element, this.Head);
  40.                 this.Head = newNode;
  41.             }
  42.             this.Count++;
  43.         }
  44.  
  45.         public void AddLast(int element)
  46.         {
  47.             if (this.Count == 0)
  48.             {
  49.                 var newNode = new Node(element, null);
  50.                 this.Head = this.Tail = newNode;
  51.             }
  52.             else
  53.             {
  54.                 var newNode = new Node(element, null);
  55.                 this.Tail.NextNode = newNode;
  56.                 this.Tail = newNode;
  57.             }
  58.             this.Count++;
  59.         }
  60.  
  61.         public int RemoveFirst()
  62.         {
  63.             if (this.Head == this.Tail)
  64.             {
  65.                 var currentNode = Head;
  66.                 this.Head = default;
  67.                 this.Tail = default;
  68.                 this.Count = 0;
  69.                 return currentNode.Value;
  70.             }
  71.             if (this.Count > 1 )
  72.             {
  73.                 var previousHeadValue = this.Head.Value;
  74.                 var nextNode = this.Head.NextNode;
  75.                 this.Head = nextNode;
  76.                 this.Count--;
  77.                 return previousHeadValue;
  78.             }
  79.             else
  80.             {
  81.                 throw new Exception("LinkedList is empty!");
  82.             }
  83.         }
  84.  
  85.         public int RemoveLast()
  86.         {
  87.             if (this.Head == this.Tail)
  88.             {
  89.                 var currentNode = Head;
  90.                 this.Head = default;
  91.                 this.Tail = default;
  92.                 this.Count = 0;
  93.                 return currentNode.Value;
  94.             }
  95.             if (this.Count > 1)
  96.             {
  97.                 var previousTail = this.Tail;
  98.                 var currentNode = this.Head;
  99.                 while (currentNode.NextNode != Tail)
  100.                 {
  101.                     currentNode = currentNode.NextNode;
  102.                 }
  103.  
  104.                 currentNode.NextNode = null;
  105.                 this.Count--;
  106.                 this.Tail = currentNode;
  107.                 return previousTail.Value;
  108.             }
  109.  
  110.             else
  111.             {
  112.                 throw new Exception("LinkedList is empty!");
  113.             }
  114.         }
  115.  
  116.         public IEnumerator<int> GetEnumerator()
  117.         {
  118.             var currentNode = this.Head;
  119.             while (currentNode != null)
  120.             {            
  121.                 yield return currentNode.Value;
  122.                 currentNode = currentNode.NextNode;
  123.             }
  124.         }
  125.  
  126.         IEnumerator IEnumerable.GetEnumerator()
  127.         {
  128.             return GetEnumerator();
  129.         }
  130.  
  131.         public int[] ToArray()        
  132.         {
  133.             int[] newArray = new int[this.Count];
  134.             var currentNode = this.Head;
  135.             for (int counter = 0; counter < this.Count; counter++)
  136.             {
  137.                 newArray[counter] = currentNode.Value;
  138.                 currentNode = currentNode.NextNode;
  139.             }
  140.  
  141.             return newArray;
  142.         }
  143.     }  
  144. }
  145.  
Add Comment
Please, Sign In to add comment