Open In App

# Sort Linked List containing values from 1 to N

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 ` `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 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 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 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 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 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 node``def` `printList(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)` `    ``printList(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`

## Javascript

 ``

Output

`1 2 3 4 5 6 `

Complexity Analysis:

• Time Complexity: O(n)
• Auxiliary Space: O(1)