Given a linked list of size N containing all values from 1 to N. The task is to sort the linked list in increasing order.
Examples:
Input : List = 3 -> 5 -> 4 -> 6 -> 1 -> 2 Output : 1 -> 2 -> 3 -> 4 -> 5 -> 6 Input : List = 5 -> 4 -> 3 -> 2 -> 1 Output : 1 -> 2 -> 3 -> 4 -> 5
Naive approach: The simplest approach is to sort this linked list with the use of any type of sorting method. It takes O(N*logN) minimum time.
Efficient approach: An efficient approach is to observe that the linked list contains a total of N elements and elements are numbered from 1 to N. Traverse the linked list and replace every element with its position.
Below is the implementation of this approach:
C++
// C++ program to sort linked list containing// values from 1 to N#include <iostream>using namespace std;// A linked list nodestruct Node { int data; struct Node* next;};// Function to sort linked listbool sortList(struct Node* head){ int startVal = 1; while (head != NULL) { head->data = startVal; startVal++; head = head->next; }}// Function to add a node at the// beginning of Linked Listvoid push(struct Node** head_ref, int new_data){ /* allocate node */ struct Node* new_node = (struct Node*)malloc(sizeof(struct 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;}// This function prints contents of// linked list starting from// the given nodevoid printList(struct Node* node){ while (node != NULL) { cout << node->data << " "; node = node->next; }}// Driver program to test above functionint main(){ struct Node* start = NULL; /* The constructed linked list is: 3->5->4->6->1->2 */ push(&start, 2); push(&start, 1); push(&start, 6); push(&start, 4); push(&start, 5); push(&start, 3); sortList(start); printList(start); return 0;} |
Java
// Java program to sort linked list containing// values from 1 to Nimport java.util.*;class GFG {/* Link list node */static class Node{ int data; Node next;};static Node start;// Function to sort linked liststatic void sortList(Node head){ int startVal = 1; while (head != null) { head.data = startVal; startVal++; head = head.next; }}// Function to add a node at the// beginning of Linked Liststatic 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; start = head_ref;}// This function prints contents of// linked list starting from// the given nodestatic void printList(Node node){ while (node != null) { System.out.print(node.data + " "); node = node.next; }}// Driver Codepublic static void main(String[] args) { start = null; /* The constructed linked list is: 3->5->4->6->1->2 */ push(start, 2); push(start, 1); push(start, 6); push(start, 4); push(start, 5); push(start, 3); sortList(start); printList(start);}}// This code is contributed by PrinciRaj1992 |
Python3
# Python3 program to sort linked list # containing values from 1 to Nimport math# A linked list nodeclass Node: def __init__(self, data): self.data = data self.next = None# Function to sort linked listdef sortList(head): startVal = 1 while (head != None): head.data = startVal startVal = startVal + 1 head = head.next # Function to add a node at the# beginning of Linked Listdef push(head_ref, new_data): # allocate node new_node = Node(new_data) # 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 return head_ref# This function prints contents of# linked list starting from# the given nodedef printList(node): while (node != None): print(node.data, end = " ") node = node.next # Driver Codeif __name__=='__main__': head = None # The constructed linked list is: #3.5.4.6.1.2 head = push(head, 2) head = push(head, 1) head = push(head, 6) head = push(head, 4) head = push(head, 5) head = push(head, 3) sortList(head) printList(head)# This code is contributed by Srathore |
C#
// C# program to sort linked list // containing values from 1 to Nusing System; class GFG {/* Link list node */public class Node{ public int data; public Node next;};static Node start;// Function to sort linked liststatic void sortList(Node head){ int startVal = 1; while (head != null) { head.data = startVal; startVal++; head = head.next; }}// Function to add a node at the// beginning of Linked Liststatic 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 off the new node */ new_node.next = head_ref; /* move the head to point to the new node */ head_ref = new_node; start = head_ref;}// This function prints contents of// linked list starting from// the given nodestatic void printList(Node node){ while (node != null) { Console.Write(node.data + " "); node = node.next; }}// Driver Codepublic static void Main(String[] args) { start = null; /* The constructed linked list is: 3->5->4->6->1->2 */ push(start, 2); push(start, 1); push(start, 6); push(start, 4); push(start, 5); push(start, 3); sortList(start); printList(start);}}// This code is contributed // by Princi Singh |
Javascript
<script> // JavaScript program to sort linked list // containing values from 1 to N /* Link list node */ class Node { constructor() { this.data = 0; this.next = null; } } var start = null; // Function to sort linked list function sortList(head) { var startVal = 1; while (head != null) { head.data = startVal; startVal++; head = head.next; } } // Function to add a node at the // beginning of Linked List function push(head_ref, new_data) { /* allocate node */ var new_node = new Node(); /* put in the data */ new_node.data = new_data; /* link the old list off the new node */ new_node.next = head_ref; /* move the head to point to the new node */ head_ref = new_node; start = head_ref; } // This function prints contents of // linked list starting from // the given node function printList(node) { while (node != null) { document.write(node.data + " "); node = node.next; } } // Driver Code start = null; /* The constructed linked list is: 3->5->4->6->1->2 */ push(start, 2); push(start, 1); push(start, 6); push(start, 4); push(start, 5); push(start, 3); sortList(start); printList(start); </script> |
1 2 3 4 5 6
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
