Ejemplo n.º 1
0
        public static void Main()
        {
            Console.WriteLine(@"Given a singly linked list of N nodes. Find if there is a cycle in the linked list
                    For example, if given linked list is 1->2->3->4->5 then output should be false.");

            SingleLLNode <int> head  = new SingleLLNode <int>(1);
            SingleLLNode <int> node2 = new SingleLLNode <int>(2);
            SingleLLNode <int> node3 = new SingleLLNode <int>(3);
            SingleLLNode <int> node4 = new SingleLLNode <int>(4);
            SingleLLNode <int> node5 = new SingleLLNode <int>(5);
            SingleLLNode <int> node6 = new SingleLLNode <int>(6);
            SingleLLNode <int> node7 = new SingleLLNode <int>(7);

            head.next  = node2;
            node2.next = node3;
            node3.next = node4;
            node4.next = node5;
            node5.next = node6;
            node6.next = node7;

            var  slowp     = head;
            var  fastp     = head;
            bool loopFound = false;

            while (slowp != null && fastp != null && fastp.next != null)
            {
                slowp = slowp.next;
                fastp = fastp.next.next;

                if (slowp == fastp)
                {
                    loopFound = true;
                }
            }

            if (loopFound)
            {
                Console.WriteLine("Loop found");
            }
            else
            {
                Console.WriteLine("Loop not found");
            }
        }
Ejemplo n.º 2
0
        public static void Main()
        {
            Console.WriteLine(@"Given a singly linked list of N nodes. 
                    The task is to find middle of the linked list. 
                    For example, if given linked list is 1->2->3->4->5 then output should be 3.");

            SingleLLNode <int> head  = new SingleLLNode <int>(1);
            SingleLLNode <int> node2 = new SingleLLNode <int>(2);
            SingleLLNode <int> node3 = new SingleLLNode <int>(3);
            SingleLLNode <int> node4 = new SingleLLNode <int>(4);
            SingleLLNode <int> node5 = new SingleLLNode <int>(5);
            SingleLLNode <int> node6 = new SingleLLNode <int>(6);
            SingleLLNode <int> node7 = new SingleLLNode <int>(7);

            head.next  = node2;
            node2.next = node3;
            node3.next = node4;
            node4.next = node5;
            node5.next = node6;
            node6.next = node7;

            //begin detection of middle node

            var midNode     = head;
            var pointerNode = head;
            int count       = 0;

            while (pointerNode != null)
            {
                pointerNode = pointerNode.next;

                if (count % 2 == 1) // if odd
                {
                    midNode = midNode.next;
                }
                count++;
            }

            Console.WriteLine($"Middle element is {midNode.data}");

            Console.ReadLine();
        }
        public static void Main()
        {
            Console.WriteLine(@"Given a singly linked list of N nodes. The task is to reverse the linked list. ");

            SingleLLNode <int> head  = new SingleLLNode <int>(1);
            SingleLLNode <int> node2 = new SingleLLNode <int>(2);
            SingleLLNode <int> node3 = new SingleLLNode <int>(3);
            SingleLLNode <int> node4 = new SingleLLNode <int>(4);
            SingleLLNode <int> node5 = new SingleLLNode <int>(5);
            SingleLLNode <int> node6 = new SingleLLNode <int>(6);
            SingleLLNode <int> node7 = new SingleLLNode <int>(7);

            head.next  = node2;
            node2.next = node3;
            node3.next = node4;
            node4.next = node5;
            node5.next = node6;
            node6.next = node7;

            // trying the most effecient method.
            //avoiding multiple iteration

            var next    = head;
            var current = head;
            var prev    = head;

            while (current != null)
            {
                next         = current.next;
                current.next = prev;
                prev         = current;
                current      = next;
            }
            head = prev;

            while (head != null)
            {
                Console.WriteLine($"{head.data}");
            }
            Console.ReadLine();
        }