static void Main(string[] args)
        {
            WriteLine("Doubly Linked List Implentation");

            // Searching -
            // O(n) time -  Just searching for a node by traversing the entire linked list |
            // O(1) space - Not storing anything other than current Node, because pointer points to different Node

            // Removing One Item
            // O(1) time | O(1) space

            // Removing Two or More Item
            // O(n) time | O(1) time

            // SetHead(), SetTail(), insertBefore(), insertAfter()
            // O(1) time | O(1) space

            // insertAtPosition(),
            // O(p) time -- Because we have to traverse all the way to the position |
            // O(1) space


            WriteLine();

            DoublyLinkedList dllist = new DoublyLinkedList();

            dllist.SetHead(500);
            //
            dllist.SetHead(200);
            dllist.SetTail(700);
            dllist.SetTail(50);
            dllist.SetHead(600);

            dllist.PrintList();
            WriteLine();

            WriteLine($"Removing Head: {dllist.RemoveHeadOrFirst()}");
            WriteLine();

            dllist.PrintList();
            WriteLine();

            WriteLine($"Removing Tail: {dllist.RemoveTailOrLast()}");
            WriteLine();

            dllist.PrintList();
            WriteLine();

            WriteLine($"Removing At Position: {dllist.RemoveNodeAtPosition()}");
            WriteLine();

            dllist.PrintList();
            WriteLine();

            //    WriteLine($"Removing Tail: {dllist.RemoveTailOrLast()}");
            //    WriteLine();

            dllist.PrintList();
            WriteLine();


            WriteLine();
        }