Merge Sort for Doubly Linked List Java
- Get link
- X
- Other Apps
PROGRAM TO IMPLEMENT MERGE SORT ON DOUBLY LINKED LIST
class LinkedList { static Node head; // head of list /* Node Class */ static class Node { int data; Node next, prev; // Constructor to create a new node Node(int d) { data = d; next = prev = null; } } void print(Node node) { Node temp = node; System.out.println("Forward Traversal using next pointer"); while (node != null) { System.out.print(node.data + " "); temp = node; node = node.next; } System.out.println("\nBackward Traversal using prev pointer"); while (temp != null) { System.out.print(temp.data + " "); temp = temp.prev; } } // Split a doubly linked list (DLL) into 2 DLLs of // half sizes Node split(Node head) { Node fast = head, slow = head; while (fast.next != null && fast.next.next != null) { fast = fast.next.next; slow = slow.next; } Node temp = slow.next; slow.next = null; return temp; } Node mergeSort(Node node) { if (node == null || node.next == null) { return node; } Node second = split(node); // Recur for left and right halves node = mergeSort(node); second = mergeSort(second); // Merge the two sorted halves return merge(node, second); } // Function to merge two linked lists Node merge(Node first, Node second) { // If first linked list is empty if (first == null) { return second; } // If second linked list is empty if (second == null) { return first; } // Pick the smaller value if (first.data < second.data) { first.next = merge(first.next, second); first.next.prev = first; first.prev = null; return first; } else { second.next = merge(first, second.next); second.next.prev = second; second.prev = null; return second; } } // Driver program to test above functions public static void main(String[] args) { LinkedList list = new LinkedList(); list.head = new Node(10); list.head.next = new Node(30); list.head.next.next = new Node(3); list.head.next.next.next = new Node(4); list.head.next.next.next.next = new Node(20); list.head.next.next.next.next.next = new Node(5); Node node = null; node = list.mergeSort(head); System.out.println("Linked list after sorting :"); list.print(node); } } OUTPUT:
Linked List after sorting Forward Traversal using next pointer 3 4 5 10 20 30 Backward Traversal using prev pointer 30 20 10 5 4 3
- Get link
- X
- Other Apps
Comments
Post a Comment