C++ Program For Sorting A Linked List Of 0s, 1s And 2s Last Updated : 10 Nov, 2022 Summarize Comments Improve Suggest changes Share Like Article Like Report Given a linked list of 0s, 1s and 2s, sort it.Examples: Input: 1 -> 1 -> 2 -> 0 -> 2 -> 0 -> 1 -> NULL Output: 0 -> 0 -> 1 -> 1 -> 1 -> 2 -> 2 -> NULL Input: 1 -> 1 -> 2 -> 1 -> 0 -> NULL Output: 0 -> 1 -> 1 -> 1 -> 2 -> NULL Source: Microsoft Interview | Set 1 Recommended: Please solve it on "PRACTICE" first, before moving on to the solution. Following steps can be used to sort the given linked list. Traverse the list and count the number of 0s, 1s, and 2s. Let the counts be n1, n2, and n3 respectively.Traverse the list again, fill the first n1 nodes with 0, then n2 nodes with 1, and finally n3 nodes with 2. Below image is a dry run of the above approach: Below is the implementation of the above approach: C++ // C++ Program to sort a linked list // 0s, 1s or 2s #include <bits/stdc++.h> using namespace std; // Link list node class Node { public: int data; Node* next; }; // Function to sort a linked list // of 0s, 1s and 2s void sortList(Node *head) { // Initialize count of '0', '1' // and '2' as 0 int count[3] = {0, 0, 0}; Node *ptr = head; /* Count total number of '0', '1' and '2' count[0] will store total number of '0's count[1] will store total number of '1's count[2] will store total number of '2's */ while (ptr != NULL) { count[ptr->data] += 1; ptr = ptr->next; } int i = 0; ptr = head; /* Let say count[0] = n1, count[1] = n2 and count[2] = n3. Now start traversing list from head node, 1) fill the list with 0, till n1 > 0 2) fill the list with 1, till n2 > 0 3) fill the list with 2, till n3 > 0 */ while (ptr != NULL) { if (count[i] == 0) ++i; else { ptr->data = i; --count[i]; ptr = ptr->next; } } } // Function to push a node void push (Node** head_ref, int new_data) { // Allocate node Node* new_node = new Node(); // Put in the data new_node->data = new_data; // Link the old list of the // new node new_node->next = (*head_ref); // Move the head to point to the // new node (*head_ref) = new_node; } // Function to print linked list void printList(Node *node) { while (node != NULL) { cout << node->data << " "; node = node->next; } cout << endl; } // Driver code int main(void) { Node *head = NULL; push(&head, 0); push(&head, 1); push(&head, 0); push(&head, 2); push(&head, 1); push(&head, 1); push(&head, 2); push(&head, 1); push(&head, 2); cout << "Linked List Before Sorting"; printList(head); sortList(head); cout << "Linked List After Sorting"; printList(head); return 0; } // This code is contributed by rathbhupendra Output: Linked List Before Sorting 2 1 2 1 1 2 0 1 0 Linked List After Sorting 0 0 1 1 1 1 2 2 2 Time Complexity: O(n) where n is the number of nodes in the linked list. Auxiliary Space: O(1) Please refer complete article on Sort a linked list of 0s, 1s and 2s for more details! Comment More infoAdvertise with us Next Article Sort a Linked List of 0s and 1s K kartik Follow Improve Article Tags : C++ Linked Lists Microsoft Amazon MakeMyTrip Linked-List-Sorting +2 More Practice Tags : AmazonMakeMyTripMicrosoftCPP Similar Reads Javascript Program For Sorting A Linked List Of 0s, 1s And 2s Given a linked list of 0s, 1s and 2s, sort it.Examples:Input: 1 -> 1 -> 2 -> 0 -> 2 -> 0 -> 1 -> NULLOutput: 0 -> 0 -> 1 -> 1 -> 1 -> 2 -> 2 -> NULLInput: 1 -> 1 -> 2 -> 1 -> 0 -> NULL Output: 0 -> 1 -> 1 -> 1 -> 2 -> NULLSource 3 min read Sort a linked list of 0s, 1s and 2s Given a linked list where nodes can contain values 0s, 1s, and 2s only. The task is to sort 0s, 1s, and 2s in the linked list such that all zeros segregate to the head side, 2s at the end of the linked list, and 1s in the middle of 0s and 2s.Examples:Input: head: 1 â 2 â 2 â 1 â 2 â 0 â 2 â 2 Output 15+ min read Sort a linked list of 0s, 1s and 2s Given a linked list of 0s, 1s and 2s, The task is to sort the list in non-decreasing order.Examples: Input: 1 -> 1 -> 2 -> 0 -> 2 -> 0 -> 1 -> NULLOutput: 0 -> 0 -> 1 -> 1 -> 1 -> 2 -> 2 -> NULLInput: 1 -> 1 -> 2 -> 1 -> 0 -> NULLOutput: 0 - 15+ min read Javascript Program For Sorting A Linked List Of 0s, 1s And 2s By Changing Links Given a linked list of 0s, 1s and 2s, sort it.Examples:Input: 2->1->2->1->1->2->0->1->0Output: 0->0->1->1->1->1->2->2->2The sorted Array is 0, 0, 1, 1, 1, 1, 2, 2, 2.Input: 2->1->0Output: 0->1->2The sorted Array is 0, 1, 2Method 1: There is 3 min read Sort a Linked List of 0s and 1s Given the singly Linked List of size n, consisting of binary integers 0s and 1s, the task is to sort the given linked list.Examples:Input: head = 1 -> 0 -> 1 -> 0 -> 1 -> NULL Output: 0 -> 0 -> 1 -> 1 -> 1 -> NULLInput: head = 1 -> 1 -> 0 -> NULL Output: 0 - 13 min read Alternate sorting of Linked list Given a linked list containing n nodes. The problem is to rearrange the nodes of the list in such a way that the data in first node is first minimum, second node is first maximum, third node is second minimum, fourth node is second maximum and so on. Examples: Input : list: 4->1->3->5->2 4 min read Like