public static Node <int> GetNodeBasedOnPosition(CustomLinkedList <int> linkedList, int position) { if (linkedList == null || linkedList.Head == null) { return(new Node <int>()); } var current = linkedList.Head; for (int i = 0; i < position; i++) { current = current.Next; } if (current == null) { return(new Node <int>()); } var positionNode = linkedList.Head; while (current != null) { current = current.Next; positionNode = positionNode.Next; } return(positionNode); }
public static CustomLinkedList <int> Remove(CustomLinkedList <int> linkedList, int key) { if (linkedList == null || linkedList.Head == null) { return(linkedList); } var current = linkedList.Head; while (current != null && current.Value == key) { current = current.Next; } var previous = current; current = current.Next; while (current != null) { if (current.Value == key) { previous.Next = current.Next; } else { previous = current; } current = current.Next; } return(linkedList); }
public static CustomLinkedList <int> RemoveDuplicate(CustomLinkedList <int> linkedList) { if (linkedList == null || linkedList.Head == null || linkedList.Head.Next == null) { return(linkedList); } HashSet <int> set = new HashSet <int>(); var previous = linkedList.Head; set.Add(previous.Value); var current = linkedList.Head.Next; while (current != null) { if (set.Contains(current.Value)) { previous.Next = current.Next; } else { set.Add(current.Value); previous = current; } current = current.Next; } return(linkedList); }
public static CustomLinkedList <int> SwapBasedOnPosition(CustomLinkedList <int> linkedList, int position) { if (linkedList == null || linkedList.Head == null) { return(linkedList); } var current = linkedList.Head; for (int i = 0; i < position; i++) { current = current.Next; } if (current == null) { return(linkedList); } var positionNode = linkedList.Head; while (current != null) { current = current.Next; positionNode = positionNode.Next; } var temp = positionNode.Value; positionNode.Value = linkedList.Head.Value; linkedList.Head.Value = temp; return(linkedList); }
public static CustomLinkedList <int> GetMergedList(CustomLinkedList <int> linkedList1, CustomLinkedList <int> linkedList2) { CustomLinkedList <int> result = new CustomLinkedList <int>(); if (linkedList1 == null) { return(linkedList2); } if (linkedList2 == null) { return(linkedList1); } var linkedList1Head = linkedList1.Head; var linkedList2Head = linkedList2.Head; while (linkedList1Head != null && linkedList2Head != null) { if (linkedList1Head.Value > linkedList2Head.Value) { result.AddLast(linkedList2Head.Value); linkedList2Head = linkedList2Head.Next; } else { result.AddLast(linkedList1Head.Value); linkedList1Head = linkedList1Head.Next; } } if (linkedList1Head != null) { while (linkedList1Head != null) { result.AddLast(linkedList1Head.Value); linkedList1Head = linkedList1Head.Next; } } if (linkedList2Head != null) { while (linkedList2Head != null) { result.AddLast(linkedList2Head.Value); linkedList2Head = linkedList2Head.Next; } } return(result); }
public static Node <int> GetIntersectionNode(CustomLinkedList <int> linkedList1, CustomLinkedList <int> linkedList2) { if (linkedList1 == null || linkedList2 == null) { return(null); } CustomLinkedList <int> shortLinkedList; CustomLinkedList <int> longLinkedList; if (linkedList1.GetLength() > linkedList2.GetLength()) { shortLinkedList = linkedList2; longLinkedList = linkedList1; } else { shortLinkedList = linkedList1; longLinkedList = linkedList2; } Node <int> shortLinkedListHead = shortLinkedList.Head; Node <int> longLinkedListHead = longLinkedList.Head; for (int i = 0; i < longLinkedList.GetLength() - shortLinkedList.GetLength(); i++) { longLinkedListHead = longLinkedListHead.Next; } while (shortLinkedListHead.Next != null) { if (shortLinkedListHead.Equals(longLinkedListHead)) { return(shortLinkedListHead); } shortLinkedListHead = shortLinkedListHead.Next; longLinkedListHead = longLinkedListHead.Next; } return(null); }
public static Node <int> Reverse(CustomLinkedList <int> linkedList) { if (linkedList == null || linkedList.Head == null) { return(null); } Node <int> previous = linkedList.Head; Node <int> current = linkedList.Head.Next; previous.Next = null; while (current != null) { var temp = current; current = current.Next; temp.Next = previous; previous = temp; } return(previous); }
public static void LinkedListProblems() { // Linked List // Reverse a linked list LinkedList <int> linked = new LinkedList <int>(); linked.AddLast(1); linked.AddLast(2); linked.AddLast(3); LinkedList <int> linked2 = new LinkedList <int>(); linked2.AddLast(1); linked2.AddLast(2); linked2.AddLast(3); PrintHelpers.PrintArray("Reverse Linked List", linked2.ToArray(), ReverseLinkedList.Reverse(linked).ToArray()); var customLinked = new CustomLinkedList <int>(); customLinked.Head = new Node <int> { Value = 1 }; customLinked.Head.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next.Next = new Node <int> { Value = 3 }; var customLinked2 = new CustomLinkedList <int>(); customLinked2.Head = new Node <int> { Value = 1 }; customLinked2.Head.Next = new Node <int> { Value = 2 }; customLinked2.Head.Next.Next = new Node <int> { Value = 2 }; customLinked2.Head.Next.Next.Next = new Node <int> { Value = 3 }; PrintHelpers.PrintArray("Reverse a Custom Linked List", customLinked2, new CustomLinkedList <int> { Head = ReverseLinkedList.Reverse(customLinked) }); // Remove duplicates in a linked list linked = new LinkedList <int>(); linked.AddLast(1); linked.AddLast(2); linked.AddLast(2); linked.AddLast(3); linked2 = new LinkedList <int>(); linked2.AddLast(1); linked2.AddLast(2); linked2.AddLast(2); linked2.AddLast(3); PrintHelpers.PrintArray("Remove Duplicates", linked2.ToArray(), RemoveDuplicates.RemoveDuplicate(linked).ToArray()); // Remove duplicates in a Custom linked list customLinked = new CustomLinkedList <int>(); customLinked.Head = new Node <int> { Value = 1 }; customLinked.Head.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next.Next = new Node <int> { Value = 3 }; customLinked2 = new CustomLinkedList <int>(); customLinked2.Head = new Node <int> { Value = 1 }; customLinked2.Head.Next = new Node <int> { Value = 2 }; customLinked2.Head.Next.Next = new Node <int> { Value = 2 }; customLinked2.Head.Next.Next.Next = new Node <int> { Value = 3 }; PrintHelpers.PrintArray("Remove Duplicates Custom Linked List", customLinked2, RemoveDuplicates.RemoveDuplicate(customLinked)); // Remove Node with given key in a linked list PrintHelpers.PrintArray("Remove Node with given key ", linked2.ToArray(), RemoveNodeWithGivenKey.Remove(linked, 2).ToArray()); // Remove Node with given key in a Custom linked list PrintHelpers.PrintArray("Remove Node with given key Custom Linked List", customLinked2, RemoveNodeWithGivenKey.Remove(customLinked, 2)); linked = new LinkedList <int>(); linked.AddLast(1); linked.AddLast(2); linked.AddLast(2); linked.AddLast(3); linked2 = new LinkedList <int>(); linked2.AddLast(1); linked2.AddLast(2); linked2.AddLast(2); linked2.AddLast(3); customLinked = new CustomLinkedList <int>(); customLinked.Head = new Node <int> { Value = 1 }; customLinked.Head.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next.Next = new Node <int> { Value = 3 }; customLinked2 = new CustomLinkedList <int>(); customLinked2.Head = new Node <int> { Value = 1 }; customLinked2.Head.Next = new Node <int> { Value = 2 }; customLinked2.Head.Next.Next = new Node <int> { Value = 2 }; customLinked2.Head.Next.Next.Next = new Node <int> { Value = 3 }; // N from last Node in a linked list PrintHelpers.PrintArray("N from last Node in a linked list", linked2.ToArray(), new LinkedList <int>(new[] { NFromLastNode.GetNodeBasedOnPosition(linked, 2).Value }).ToArray(), "Node: 2"); // N from last Node in a Custom linked list PrintHelpers.PrintArray("N from last Node in a custom linked list", customLinked2, new CustomLinkedList <int> { Head = new Node <int> { Value = NFromLastNode.GetNodeBasedOnPosition(customLinked, 2).Value } }, "Node: 2"); // Swap N Node with Head PrintHelpers.PrintArray("Swap N Node with Head", linked2.ToArray(), SwapNnodeWithHead.SwapBasedOnPosition(linked, 2).ToArray(), "Node: 2"); PrintHelpers.PrintArray("Swap N Node with Head", customLinked2, SwapNnodeWithHead.SwapBasedOnPosition(customLinked, 2), "Node: 2"); // Intersection Point of 2 Linked list //LinkedListNode<int> node = new LinkedListNode<int>(5); //linked = new LinkedList<int>(); //linked.AddLast(1); //linked.AddLast(2); //linked.AddLast(2); //linked.AddLast(node); //linked.AddLast(3); //linked2 = new LinkedList<int>(); //linked2.AddLast(1); //linked2.AddLast(2); //linked2.AddLast(2); //linked2.AddLast(node); //linked2.AddLast(3); var node = new Node <int> { Value = 5 }; customLinked = new CustomLinkedList <int>(); customLinked.Head = new Node <int> { Value = 1 }; customLinked.Head.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next.Next = node; customLinked.Head.Next.Next.Next.Next = new Node <int> { Value = 3 }; customLinked2 = new CustomLinkedList <int>(); customLinked2.Head = new Node <int> { Value = 7 }; customLinked2.Head.Next = new Node <int> { Value = 8 }; customLinked2.Head.Next.Next = new Node <int> { Value = 9 }; customLinked2.Head.Next.Next.Next = node; customLinked2.Head.Next.Next.Next.Next = new Node <int> { Value = 3 }; PrintHelpers.PrintArray("Intersection Point of 2 Linked list in Custom Linked List", new[] { customLinked, customLinked2 }, new CustomLinkedList <int> { Head = new Node <int> { Value = IntersectionPointOfTwoLists.GetIntersectionNode(customLinked, customLinked2).Value } }); //Merge two Sorted Arrays linked = new LinkedList <int>(); linked.AddLast(1); linked.AddLast(4); linked.AddLast(8); linked.AddLast(11); linked2 = new LinkedList <int>(); linked2.AddLast(2); linked2.AddLast(4); linked2.AddLast(5); linked2.AddLast(9); PrintHelpers.PrintArray("Merge Two Sorted Arrays", new [] { linked.ToArray(), linked2.ToArray() }, MergeTwoSortedLinkedList.GetMergedList(linked, linked2).ToArray()); customLinked = new CustomLinkedList <int>(); customLinked.Head = new Node <int> { Value = 1 }; customLinked.Head.Next = new Node <int> { Value = 4 }; customLinked.Head.Next.Next = new Node <int> { Value = 8 }; customLinked.Head.Next.Next.Next = new Node <int> { Value = 11 }; customLinked2 = new CustomLinkedList <int>(); customLinked2.Head = new Node <int> { Value = 2 }; customLinked2.Head.Next = new Node <int> { Value = 4 }; customLinked2.Head.Next.Next = new Node <int> { Value = 5 }; customLinked2.Head.Next.Next.Next = new Node <int> { Value = 9 }; PrintHelpers.PrintArray("Merge Two Sorted Arrays in Custom Linked List", new [] { customLinked, customLinked2 }, MergeTwoSortedLinkedList.GetMergedList(customLinked, customLinked2)); // Rotata a linked list customLinked = new CustomLinkedList <int>(); customLinked.Head = new Node <int> { Value = 1 }; customLinked.Head.Next = new Node <int> { Value = 2 }; customLinked.Head.Next.Next = new Node <int> { Value = 3 }; customLinked.Head.Next.Next.Next = new Node <int> { Value = 4 }; customLinked2 = new CustomLinkedList <int>(); customLinked2.Head = new Node <int> { Value = 1 }; customLinked2.Head.Next = new Node <int> { Value = 2 }; customLinked2.Head.Next.Next = new Node <int> { Value = 3 }; customLinked2.Head.Next.Next.Next = new Node <int> { Value = 4 }; PrintHelpers.PrintArray("Rotate in Custom Linked List", customLinked2, RotateLinkedList.Rotate(customLinked, 2)); }