Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.69 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace List
  7. {
  8.  
  9.     class LinkedList<T>
  10.     {
  11.         #region [Private members]
  12.  
  13.         private class Node<T>
  14.         {
  15.             public Node(T key)
  16.             {
  17.                 Key = key;
  18.                 Prev = null;
  19.                 Next = null;
  20.             }
  21.  
  22.             public T Key { get; set; }
  23.             public Node<T> Prev { get; set; }
  24.             public Node<T> Next { get; set; }
  25.         }
  26.  
  27.         private Node<T> root;
  28.  
  29.         private int count;
  30.  
  31.         private Node<T> At(int index)
  32.         {
  33.             if (index < 0 || index >= Count)
  34.                 return null;
  35.             var node = root;
  36.             for (int i = 0; i < index; ++i)
  37.                 node = node.Next;
  38.             return node;
  39.         }
  40.  
  41.         #endregion
  42.  
  43.         #region [Public members]
  44.  
  45.         public LinkedList()
  46.         {
  47.             root = null;
  48.         }
  49.        
  50.         public void Clear()
  51.         {
  52.             root = null;
  53.             count = 0;
  54.         }
  55.  
  56.         public int Count
  57.         {
  58.             get { return count; }
  59.         }
  60.  
  61.         public bool Contains(T key)
  62.         {
  63.             for (var x = root; x != null; x = x.Next)
  64.                 if (x.Key.Equals(key))
  65.                     return true;
  66.             return false;
  67.         }
  68.  
  69.         public void Insert(T key, int index)
  70.         {
  71.             var node = new Node<T>(key);
  72.                        
  73.             var prev = At(index - 1);
  74.             if (prev == null)
  75.             {
  76.                 node.Next = root;
  77.                 root = node;
  78.                 ++count;
  79.                 return;
  80.             }
  81.  
  82.             var next = prev.Next;
  83.  
  84.             if (prev != null)
  85.             {
  86.                 prev.Next = node;
  87.                 node.Prev = prev;
  88.             }
  89.             if (next != null)
  90.             {
  91.                 next.Prev = node;
  92.                 node.Next = next;
  93.             }
  94.             ++count;
  95.         }
  96.  
  97.         public void Add(T key)
  98.         {
  99.             Insert(key, Count);
  100.         }
  101.  
  102.         public void RemoveAt(int index)
  103.         {            
  104.             var node = At(index);
  105.             if (node == null)
  106.                 return;
  107.             var prev = node.Prev;
  108.             var next = node.Next;
  109.             if (prev != null)
  110.                 prev.Next = next;
  111.             if (next != null)
  112.                 next.Prev = prev;
  113.             if (root == node)
  114.                 root = next;
  115.  
  116.             --count;
  117.         }
  118.  
  119.         public void Remove(T key)
  120.         {
  121.             int index = IndexOf(key);
  122.             RemoveAt(index);
  123.         }
  124.  
  125.         public T this[int index]
  126.         {
  127.             get
  128.             {
  129.                 return At(index).Key;
  130.             }
  131.             set
  132.             {
  133.                 At(index).Key = value;
  134.             }
  135.         }
  136.  
  137.         public int IndexOf(T key)
  138.         {            
  139.             int index = 0;
  140.             for (var node = root; node != null; node = node.Next)
  141.             {
  142.                 if (node.Key.Equals(key))
  143.                     break;
  144.                 ++index;
  145.             }
  146.             return index;
  147.         }
  148.  
  149.         #endregion
  150.     }
  151.  
  152.  
  153.     class Program
  154.     {
  155.         static void Main(string[] args)
  156.         {
  157.             LinkedList<int> list = new LinkedList<int>();
  158.             list.Add(5);
  159.             list.Add(6);
  160.             list.Insert(10, 0);
  161.             Console.WriteLine(list[0]);
  162.             Console.WriteLine(list[1]);
  163.             list.RemoveAt(0);
  164.             Console.WriteLine(list[0]);
  165.             Console.WriteLine(list.Count);
  166.         }
  167.     }
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement