# Reverse first K elements of given linked list

• Difficulty Level : Easy
• Last Updated : 22 Sep, 2022

Given a pointer to the head node of a linked list and a number K, the task is to reverse the first K nodes of the linked list. We need to reverse the list by changing links between nodes.
check also Reversal of a linked list

Examples:

Input : 1->2->3->4->5->6->7->8->9->10->NULL, k = 3
Output : 3->2->1->4->5->6->7->8->9->10->NULL

Input : 10->18->20->25->35->NULL, k = 2
Output : 18->10->20->25->35->NULL

Explanation of the method:
suppose linked list is 1->2->3->4->5->NULL and k=3
1) Traverse the linked list till K-th point.
2) Break the linked list in to two parts from k-th point. After partition linked list will look like 1->2->3->NULL & 4->5->NULL
3) Reverse first part of the linked list leave second part as it is 3->2->1->NULL and 4->5->NULL
4) Join both the parts of the linked list, we get 3->2->1->4->5->NULL
A pictorial representation of how the algorithm works

## C++

 `// C++ program for reversal of first k elements``// of given linked list``#include ``using` `namespace` `std;` `/* Link list node */``struct` `Node {``    ``int` `data;``    ``struct` `Node* next;``};` `/* Function to reverse first k elements of linked list */``static` `void` `reverseKNodes(``struct` `Node** head_ref, ``int` `k)``{``    ``// traverse the linked list until break``    ``// point not meet``    ``struct` `Node* temp = *head_ref;``    ``int` `count = 1;``    ``while` `(count < k) {``        ``temp = temp->next;``        ``count++;``    ``}` `    ``// backup the joint point``    ``struct` `Node* joint_point = temp->next;``    ``temp->next = NULL; ``// break the list` `    ``// reverse the list till break point``    ``struct` `Node* prev = NULL;``    ``struct` `Node* current = *head_ref;``    ``struct` `Node* next;``    ``while` `(current != NULL) {``        ``next = current->next;``        ``current->next = prev;``        ``prev = current;``        ``current = next;``    ``}` `    ``// join both parts of the linked list``    ``// traverse the list until NULL is not``    ``// found``    ``*head_ref = prev;``    ``current = *head_ref;``    ``while` `(current->next != NULL)``        ``current = current->next;` `    ``// joint both part of the list``    ``current->next = joint_point;``}` `/* Function to push a node */``void` `push(``struct` `Node** head_ref, ``int` `new_data)``{``    ``struct` `Node* new_node =``          ``(``struct` `Node*)``malloc``(``sizeof``(``struct` `Node));``    ``new_node->data = new_data;``    ``new_node->next = (*head_ref);``    ``(*head_ref) = new_node;``}` `/* Function to print linked list */``void` `printList(``struct` `Node* head)``{``    ``struct` `Node* temp = head;``    ``while` `(temp != NULL) {``        ``printf``(``"%d "``, temp->data);``        ``temp = temp->next;``    ``}``}` `/* Driver program to test above function*/``int` `main()``{``    ``// Create a linked list 1->2->3->4->5``    ``struct` `Node* head = NULL;``    ``push(&head, 5);``    ``push(&head, 4);``    ``push(&head, 3);``    ``push(&head, 2);``    ``push(&head, 1);` `    ``// k should be less than the``    ``// numbers of nodes``    ``int` `k = 3;` `    ``cout << ``"\nGiven list\n"``;``    ``printList(head);` `    ``reverseKNodes(&head, k);` `    ``cout << ``"\nModified list\n"``;``    ``printList(head);` `    ``return` `0;``}`

## Java

 `// Java program for reversal of first k elements``// of given linked list``class` `Sol``{``    ` `// Link list node``static` `class` `Node``{``    ``int` `data;``    ``Node next;``};` `// Function to reverse first k elements of linked list``static` `Node reverseKNodes( Node head_ref, ``int` `k)``{``    ``// traverse the linked list until break``    ``// point not meet``    ``Node temp = head_ref;``    ``int` `count = ``1``;``    ``while` `(count < k)``    ``{``        ``temp = temp.next;``        ``count++;``    ``}` `    ``// backup the joint point``    ``Node joint_point = temp.next;``    ``temp.next = ``null``; ``// break the list` `    ``// reverse the list till break point``    ``Node prev = ``null``;``    ``Node current = head_ref;``    ``Node next;``    ``while` `(current != ``null``)``    ``{``        ``next = current.next;``        ``current.next = prev;``        ``prev = current;``        ``current = next;``    ``}` `    ``// join both parts of the linked list``    ``// traverse the list until null is not``    ``// found``    ``head_ref = prev;``    ``current = head_ref;``    ``while` `(current.next != ``null``)``        ``current = current.next;` `    ``// joint both part of the list``    ``current.next = joint_point;``    ``return` `head_ref;``}` `// Function to push a node``static` `Node push( Node head_ref, ``int` `new_data)``{``    ``Node new_node = ``new` `Node();``    ``new_node.data = new_data;``    ``new_node.next = (head_ref);``    ``(head_ref) = new_node;``    ``return` `head_ref;``}` `// Function to print linked list``static` `void` `printList( Node head)``{``    ``Node temp = head;``    ``while` `(temp != ``null``)``    ``{``        ``System.out.printf(``"%d "``, temp.data);``        ``temp = temp.next;``    ``}``}` `// Driver program to test above function``public` `static` `void` `main(String args[])``{``    ``// Create a linked list 1.2.3.4.5``    ``Node head = ``null``;``    ``head = push(head, ``5``);``    ``head = push(head, ``4``);``    ``head = push(head, ``3``);``    ``head = push(head, ``2``);``    ``head = push(head, ``1``);` `    ``// k should be less than the``    ``// numbers of nodes``    ``int` `k = ``3``;` `    ``System.out.print(``"\nGiven list\n"``);``    ``printList(head);` `    ``head = reverseKNodes(head, k);` `    ``System.out.print(``"\nModified list\n"``);``    ``printList(head);``}``}` `// This code is contributed by Arnab Kundu`

## Python

 `# Python program for reversal of first k elements``# of given linked list` `# Node of a linked list``class` `Node:``    ``def` `__init__(``self``, ``next` `=` `None``, data ``=` `None``):``        ``self``.``next` `=` `next``        ``self``.data ``=` `data` `# Function to reverse first k elements of linked list``def` `reverseKNodes(head_ref, k) :` `    ``# traverse the linked list until break``    ``# point not meet``    ``temp ``=` `head_ref``    ``count ``=` `1``    ``while` `(count < k):``    ` `        ``temp ``=` `temp.``next``        ``count ``=` `count ``+` `1``    ` `    ``# backup the joint point``    ``joint_point ``=` `temp.``next``    ``temp.``next` `=` `None` `# break the list` `    ``# reverse the list till break point``    ``prev ``=` `None``    ``current ``=` `head_ref``    ``next` `=` `None``    ``while` `(current !``=` `None``):``    ` `        ``next` `=` `current.``next``        ``current.``next` `=` `prev``        ``prev ``=` `current``        ``current ``=` `next``    ` `    ``# join both parts of the linked list``    ``# traverse the list until None is not``    ``# found``    ``head_ref ``=` `prev``    ``current ``=` `head_ref``    ``while` `(current.``next` `!``=` `None``):``        ``current ``=` `current.``next` `    ``# joint both part of the list``    ``current.``next` `=` `joint_point``    ``return` `head_ref` `# Function to push a node``def` `push(head_ref, new_data) :` `    ``new_node ``=` `Node()``    ``new_node.data ``=` `new_data``    ``new_node.``next` `=` `(head_ref)``    ``(head_ref) ``=` `new_node``    ``return` `head_ref` `# Function to print linked list``def` `printList( head) :` `    ``temp ``=` `head``    ``while` `(temp !``=` `None``):``    ` `        ``print``(temp.data, end ``=` `" "``)``        ``temp ``=` `temp.``next``    ` `# Driver program to test above function` `# Create a linked list 1.2.3.4.5``head ``=` `None``head ``=` `push(head, ``5``)``head ``=` `push(head, ``4``)``head ``=` `push(head, ``3``)``head ``=` `push(head, ``2``)``head ``=` `push(head, ``1``)` `# k should be less than the``# numbers of nodes``k ``=` `3` `print``(``"\nGiven list"``)``printList(head)` `head ``=` `reverseKNodes(head, k)` `print``(``"\nModified list"``)``printList(head)` `# This code is contributed by Arnab Kundu`

## C#

 `// C# program for reversal of first k elements``// of given linked list``using` `System;``    ` `class` `GFG``{``    ` `// Link list node``public` `class` `Node``{``    ``public` `int` `data;``    ``public` `Node next;``};` `// Function to reverse first k elements of linked list``static` `Node reverseKNodes(Node head_ref, ``int` `k)``{``    ` `    ``// traverse the linked list until break``    ``// point not meet``    ``Node temp = head_ref;``    ``int` `count = 1;``    ``while` `(count < k)``    ``{``        ``temp = temp.next;``        ``count++;``    ``}` `    ``// backup the joint point``    ``Node joint_point = temp.next;``    ``temp.next = ``null``; ``// break the list` `    ``// reverse the list till break point``    ``Node prev = ``null``;``    ``Node current = head_ref;``    ``Node next;``    ``while` `(current != ``null``)``    ``{``        ``next = current.next;``        ``current.next = prev;``        ``prev = current;``        ``current = next;``    ``}` `    ``// join both parts of the linked list``    ``// traverse the list until null is not``    ``// found``    ``head_ref = prev;``    ``current = head_ref;``    ``while` `(current.next != ``null``)``        ``current = current.next;` `    ``// joint both part of the list``    ``current.next = joint_point;``    ``return` `head_ref;``}` `// Function to push a node``static` `Node push( Node head_ref, ``int` `new_data)``{``    ``Node new_node = ``new` `Node();``    ``new_node.data = new_data;``    ``new_node.next = (head_ref);``    ``(head_ref) = new_node;``    ``return` `head_ref;``}` `// Function to print linked list``static` `void` `printList( Node head)``{``    ``Node temp = head;``    ``while` `(temp != ``null``)``    ``{``        ``Console.Write(``"{0} "``, temp.data);``        ``temp = temp.next;``    ``}``}` `// Driver Code``public` `static` `void` `Main(String []args)``{``    ``// Create a linked list 1.2.3.4.5``    ``Node head = ``null``;``    ``head = push(head, 5);``    ``head = push(head, 4);``    ``head = push(head, 3);``    ``head = push(head, 2);``    ``head = push(head, 1);` `    ``// k should be less than the``    ``// numbers of nodes``    ``int` `k = 3;` `    ``Console.Write(``"Given list\n"``);``    ``printList(head);` `    ``head = reverseKNodes(head, k);` `    ``Console.Write(``"\nModified list\n"``);``    ``printList(head);``}``}` `// This code is contributed by Princi Singh`

## Javascript

 ``

Output:

```Given list
1 2 3 4 5
Modified list
3 2 1 4 5 ```

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

My Personal Notes arrow_drop_up