MyLinkedList ReverseLinkedList(MyLinkedList myLinkedList) { MyLinkedListNode left = myLinkedList.getFirst(); MyLinkedListNode right = myLinkedList.getLast(); MyLinkedListNode tempNode = null; //Shuffle the right neighbours of left node to point to right. left.getNext().setPrevious(right); //Shuffle the left of neighbours of right node to point to left. right.getPrevious().setNext(left); // make sure that the old left neighbor of right node is now the recent left neighbour of left node // and the old left neighbour of left node is now the recent left neighbor of right node tempNode = left.getPrevious(); left.setPrevious(right.getPrevious()); right.setPrevious(tempNode); // make sure that the old right neighbor of right node is now the recent right neighbour of left node // and the old right neighbour of left node is now the recent right neighbor of right node tempNode = left.getNext(); left.setNext(right.getNext()); right.setNext(tempNode); //Arrange the first and last node as they are at the edge myLinkedList.setFirstNode(right); myLinkedList.setLastNode(left); //Get the first and last after reversing the left and right edge nodes. left = myLinkedList.getFirst(); right = myLinkedList.getLast(); //This is for the remaining inner nodes. for (int i = 1; i < myLinkedList.getCount() / 2; i++) { left = left.getNext(); if (left == right) //left and right have joined for even length of linked list. { break; } right = right.getPrevious(); if (left == right)//left and right have joined for odd length of linked list. { break; } //Shuffle the refences of neighbours of left to point to right. if (left.getNext() == right) // left and right about to join { left.getPrevious().setNext(right); right.getNext().setPrevious(left); left.setNext(right.getNext()); right.setPrevious(left.getPrevious()); left.setPrevious(right); right.setNext(left); break; } left.getNext().setPrevious(right); left.getPrevious().setNext(right); //Shuffle the refences of neighbours of right to point to left. right.getNext().setPrevious(left); right.getPrevious().setNext(left); // make sure that the old left neighbor of right node is now the recent left neighbour of left node // and the old left neighbour of left node is now the recent left neighbor of right node tempNode = left.getPrevious(); left.setPrevious(right.getPrevious()); right.setPrevious(tempNode); // make sure that the old right neighbor of right node is now the recent right neighbour of left node // and the old right neighbour of left node is now the recent right neighbor of right node tempNode = left.getNext(); left.setNext(right.getNext()); right.setNext(tempNode); tempNode = left; left = right; right = tempNode; } return(myLinkedList); }
/// <summary> /// Driver method. /// </summary> /// <param name="args"></param> static void Main(string[] args) { var applicationUnderTest = new Program(); var result = applicationUnderTest.CreatePair(new[] { 1, 3, 5, 7, 0, 90 }); Console.WriteLine("Content of the Pair object after getting created"); foreach (var resultItem in result) { Console.WriteLine(resultItem); } Console.WriteLine("=================================================================================================="); Console.WriteLine(); var inputArray = new[] { 1, 3, 5, 7, 0, 90 }; Console.WriteLine("Before Calling Reverse Array"); Console.WriteLine("-----------------------------"); foreach (var item in inputArray) { Console.Write(item + " "); } Console.WriteLine(); var resultArray = applicationUnderTest.ReverseArray(new[] { 1, 3, 5, 7, 0, 90 }); Console.WriteLine("After Calling Reverse Array"); Console.WriteLine("-----------------------------"); foreach (var item in resultArray) { Console.Write(item + " "); } Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); var array1 = new[] { -5, 6, 3, -2, 10, -12, 20, 11 }; var array2 = new[] { 7, 20, 9, -5, 2, 14, 3 }; Console.WriteLine("Content of Array1"); Console.WriteLine("-----------------------------"); foreach (var item in array1) { Console.Write(item + " "); } Console.WriteLine(); Console.WriteLine("Content of Array2"); Console.WriteLine("-----------------------------"); foreach (var item in array2) { Console.Write(item + " "); } Console.WriteLine(); var resultUnion = applicationUnderTest.FindIntersection(array1, array2); Console.WriteLine("Intersection of Array1 and Array2"); Console.WriteLine("-----------------------------"); foreach (var item in resultUnion) { Console.Write(item + " "); } Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); var nonUniqueValues = new [] { 7, 10, 10, 12, 15, 17, 17, 17, 17, 20, 25, 33, 40, 40, 40, 45, 45, 49 }; Console.WriteLine("Values of nonUnique Array"); Console.WriteLine("-----------------------------"); foreach (var item in nonUniqueValues) { Console.Write(item + " "); } Console.WriteLine(); var resultUniqueValues = applicationUnderTest.RemoveDuplicates(nonUniqueValues); Console.WriteLine("Content of unique result"); Console.WriteLine("-----------------------------"); foreach (var item in resultUniqueValues) { Console.Write(item + " "); } Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); var myLinkedList = new MyLinkedList(10); myLinkedList.addLast(15); myLinkedList.addLast(20); myLinkedList.addLast(25); myLinkedList.addLast(30); myLinkedList.addLast(35); myLinkedList.addLast(40); // myLinkedList.addLast(45); Console.WriteLine("Content of the linkedlist before reversal "); myLinkedList.DisplayAll(); //Apply Reverse linked list operation. var reversedLinkedList = applicationUnderTest.ReverseLinkedList(myLinkedList); Console.WriteLine("Content of the linkedlist after reversal "); reversedLinkedList.DisplayAll(); Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); myLinkedList = new MyLinkedList(10); myLinkedList.addLast(103); myLinkedList.addLast(20); myLinkedList.addLast(88); myLinkedList.addLast(30); myLinkedList.addLast(99); Console.WriteLine("Content of the linkedlist before applying sorting with ascending order "); myLinkedList.DisplayAll(); Console.WriteLine("Content of the linkedlist after applying sorting with ascending order "); myLinkedList.bubblesortAscending(); myLinkedList.DisplayAll(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); myLinkedList = new MyLinkedList(10); myLinkedList.addLast(103); myLinkedList.addLast(20); myLinkedList.addLast(88); myLinkedList.addLast(30); myLinkedList.addLast(99); myLinkedList.addLast(40); Console.WriteLine("Content of the linkedlist before applying sorting with descending order "); myLinkedList.DisplayAll(); Console.WriteLine("Content of the linkedlist after applying sorting with descending order "); myLinkedList.bubblesortDescending(); myLinkedList.DisplayAll(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); Console.WriteLine(); myLinkedList = new MyLinkedList(10); myLinkedList.addLast(103); myLinkedList.addLast(103); myLinkedList.addLast(20); myLinkedList.addLast(20); myLinkedList.addLast(88); myLinkedList.addLast(30); myLinkedList.addLast(30); myLinkedList.addLast(99); myLinkedList.addLast(99); myLinkedList.addLast(99); myLinkedList.addLast(40); myLinkedList.addLast(400); myLinkedList.bubblesortAscending(); Console.WriteLine("Content of sorted linkedlist before applying Remove duplicate with descending order "); myLinkedList.DisplayAll(); myLinkedList.RemoveDuplicateFromSortedList(); Console.WriteLine("Content of the sorted linkedlist after removeing duplicates."); myLinkedList.DisplayAll(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); Console.WriteLine(); var intStack = new Stack <int>(); intStack.Push(103); intStack.Push(100); intStack.Push(20); intStack.Push(55); intStack.Push(88); intStack.Push(31); intStack.Push(30); intStack.Push(29); intStack.Push(79); intStack.Push(99); intStack.Push(80); intStack.Push(400); Console.WriteLine("Content of Stack before applying Remove last entry:"); intStack.GetEnumerator(); var enumerator = intStack.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current + " "); } Console.WriteLine(); Console.WriteLine("Content of Stack after applying Remove last entry"); intStack = applicationUnderTest.RemoveTop(intStack); enumerator = intStack.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current + " "); } Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); Console.WriteLine(); intStack = new Stack <int>(); intStack.Push(103); intStack.Push(100); intStack.Push(20); intStack.Push(55); intStack.Push(88); intStack.Push(31); intStack.Push(30); intStack.Push(29); intStack.Push(79); intStack.Push(99); intStack.Push(80); intStack.Push(400); Console.WriteLine("Content of Stack before Swapping half of the stack:"); intStack.GetEnumerator(); enumerator = intStack.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current + " "); } Console.WriteLine(); Console.WriteLine("Content of Stack after Swapping half of the stack:"); intStack = applicationUnderTest.SwapHalfOfStack(intStack); enumerator = intStack.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current + " "); } Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); Console.WriteLine(); var intQueue = new Queue <int>(); intQueue.Enqueue(103); intQueue.Enqueue(100); intQueue.Enqueue(20); intQueue.Enqueue(55); intQueue.Enqueue(88); intQueue.Enqueue(3100); intQueue.Enqueue(30); intQueue.Enqueue(29); intQueue.Enqueue(79); intQueue.Enqueue(99); intQueue.Enqueue(80); intQueue.Enqueue(400); Console.WriteLine("Content of Queue before positioning the max to the front:"); intQueue.GetEnumerator(); var enumeratorQueue = intQueue.GetEnumerator(); while (enumeratorQueue.MoveNext()) { Console.WriteLine(enumeratorQueue.Current + " "); } Console.WriteLine(); Console.WriteLine("Content of Queue after positioning the max to the front:"); intQueue = PositionMaxEntryToTheFront(intQueue); enumeratorQueue = intQueue.GetEnumerator(); while (enumeratorQueue.MoveNext()) { Console.WriteLine(enumeratorQueue.Current + " "); } Console.WriteLine(); Console.WriteLine("=================================================================================================="); Console.WriteLine(); Console.ReadKey(); }