Related Articles
Sort Linked List containing values from 1 to N
• Last Updated : 25 Nov, 2019

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 ` ` `  `using` `namespace` `std; ` ` `  `// A linked list node ` `struct` `Node { ` `    ``int` `data; ` `    ``struct` `Node* next; ` `}; ` ` `  `// Function to sort linked list ` `bool` `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 List ` `void` `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 off 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 node ` `void` `printList(``struct` `Node* node) ` `{ ` `    ``while` `(node != NULL) { ` `        ``cout << node->data << ``" "``; ` ` `  `        ``node = node->next; ` `    ``} ` `} ` ` `  `// Driver program to test above function ` `int` `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 N ` `import` `java.util.*; ` `class` `GFG  ` `{ ` ` `  `/* Link list node */` `static` `class` `Node ` `{ ` `    ``int` `data; ` `    ``Node next; ` `}; ` `static` `Node start; ` ` `  `// Function to sort linked list ` `static` `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 List ` `static` `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 node ` `static` `void` `printList(Node node) ` `{ ` `    ``while` `(node != ``null``) ` `    ``{ ` `        ``System.out.print(node.data + ``" "``); ` ` `  `        ``node = node.next; ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `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 N ` `import` `math ` ` `  `# A linked list node ` `class` `Node:  ` `    ``def` `__init__(``self``, data):  ` `        ``self``.data ``=` `data  ` `        ``self``.``next` `=` `None` ` `  `# Function to sort linked list ` `def` `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 List ` `def` `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 off the new node  ` `    ``new_node.``next` `=` `head_ref ` ` `  `    ``# move the head to po to the new node  ` `    ``head_ref ``=` `new_node ` `    ``return` `head_ref ` ` `  `# This function prs contents of ` `# linked list starting from ` `# the given node ` `def` `prList(node): ` `    ``while` `(node !``=` `None``): ` `        ``print``(node.data, end ``=` `" "``) ` ` `  `        ``node ``=` `node.``next` `     `  `# Driver Code ` `if` `__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) ` ` `  `    ``prList(head) ` ` `  `# This code is contributed by Srathore `

## C#

 `// C# program to sort linked list  ` `// containing values from 1 to N ` `using` `System; ` `     `  `class` `GFG  ` `{ ` ` `  `/* Link list node */` `public` `class` `Node ` `{ ` `    ``public` `int` `data; ` `    ``public` `Node next; ` `}; ` `static` `Node start; ` ` `  `// Function to sort linked list ` `static` `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 List ` `static` `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 node ` `static` `void` `printList(Node node) ` `{ ` `    ``while` `(node != ``null``) ` `    ``{ ` `        ``Console.Write(node.data + ``" "``); ` ` `  `        ``node = node.next; ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `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 `

Output:

```1 2 3 4 5 6
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :