Exemple #1
0
        //static void Main()
        //{
        //    SingleLinkedList ll1 = new SingleLinkedList();
        //    ll1.InsertLast(2);
        //    ll1.InsertLast(4);
        //    ll1.InsertLast(5);
        //    ll1.InsertLast(1);
        //    ll1.InsertLast(3);

        //    SingleLinkedList ll2 = new SingleLinkedList();
        //    ll2.InsertLast(6);
        //    ll2.InsertLast(9);
        //    ll2.InsertLast(8);
        //    ll2.InsertLast(7);
        //    ll2.InsertLast(10);

        //    var result = SortedMergeLinkedListRecursion(ll1.head, ll2.head);

        //    Console.WriteLine("Completed");
        //}

        //O(nLog(n)) time complexity
        //O(n) space
        public SLLNode MergeSort(SLLNode head)
        {
            if (head == null || head.next == null)
            {
                return(head);
            }

            SLLNode middle     = GetMiddleNode.GetMiddleNodeLinkedList(head);
            SLLNode middlenext = middle.next;

            middle.next = null;

            SLLNode left = MergeSort(head);

            SLLNode right = MergeSort(middlenext);

            SLLNode sortedlist = SortedMergeLinkedListRecursion(left, right);

            return(sortedlist);
        }
Exemple #2
0
        //static void Main()
        //{
        //    SingleLinkedList sll = new SingleLinkedList();
        //    sll.InsertLast(0);
        //    sll.InsertLast(0);

        //    var ispalind = IsPalindrome(sll.head);

        //    Console.WriteLine();
        //}

        //O(Log(n)) time complexity
        //O(1) space
        static bool IsPalindrome(SLLNode head)
        {
            var middle = GetMiddleNode.GetMiddleNodeLinkedList(head);

            var half1 = head;
            var half2 = ReverseLinkedList.Reverse(middle);

            while (half1 != null && half2 != null)
            {
                if (half1.data != half2.data)
                {
                    return(false);
                }

                half1 = half1.next;
                half2 = half2.next;
            }

            return(true);
        }