static void Main(string[] args)
        {
            Console.WriteLine("\t\tCustom Linked List");
            Console.WriteLine("\t\t**************");
            CSLinkedList list = new CSLinkedList();

            list.InsertNode(list, 1);
            list.InsertNode(list, 2);
            list.InsertNode(list, 3);
            list.InsertNode(list, 5);
            list.PrintList(list);
            list.DeleteByKey(list, 3);
            list.DeleteByKey(list, 1);
            list.DeleteByKey(list, 7);
            Console.WriteLine("Adding a new element at the end of the list");
            list.InsertNode(list, 43);
            list.PrintList(list);
            Console.WriteLine("-------------------");
            list.PrintList(list);
            Console.WriteLine("Adding a new element at random positions in list");
            list.InsertAtPosition(list, 77, 6);
            list.InsertAtPosition(list, 77, 4);
            list.InsertAtPosition(list, 71, 1);
            list.InsertAtPosition(list, 73, 3);
            Console.ReadKey();
        }
 public void InsertAtPosition(CSLinkedList list, int data, int position)
 {
     if (position > list.Length(list) + 1 || position < 1)
     {
         Console.WriteLine("Can't add to this position. Position doesn't exist");
         return;
     }
     else if (position == list.Length(list) + 1)
     {
         Console.WriteLine("List length is {0} and position is {1}.Appending at the end of the list", list.Length(list), position);
         list.InsertNode(list, data);
         list.PrintList(list);
     }
     else if (position == 1)
     {
         Console.WriteLine("Adding new node at the beginning of the list");
         Node newNode  = new Node(data);
         Node currHead = list.head;
         list.head    = newNode;
         newNode.next = currHead;
         list.PrintList(list);
     }
     else
     {
         int  currPosition = 2;
         Node previousNode = list.head;
         Node currNode     = previousNode.next;
         Node newNode      = new Node(data);
         while (currNode.next != null)
         {
             if (position == currPosition)
             {
                 previousNode.next = newNode;
                 newNode.next      = currNode;
                 Console.WriteLine("Adding new node at position {0}", position);
                 Console.WriteLine("Printing updated list...");
                 list.PrintList(list);
                 return;
             }
             previousNode = currNode;
             currNode     = currNode.next;
             currPosition++;
         }
     }
 }