# Reverse the order of all nodes at even position in given Linked List

• Difficulty Level : Easy
• Last Updated : 07 Mar, 2022

Given a linked list A[] of N integers, the task is to reverse the order of all integers at an even position.

Examples:

Input: A[] = 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> NULL
Output: 1 6 3 4 5 2
Explanation:  Nodes at even position in the given linked list are 2, 4 and 6. So, after reversing there order, the new linked list will be 1 -> 6 -> 3 -> 4 -> 5 -> 2 -> NULL.

Input:  A[] = 1 -> 5 -> 3->NULL
Output: 1 5 3

Approach: The given problem can be solved by maintaining two linked lists, one list for all odd positioned nodes and another list for all even positioned nodes. Traverse the given linked list which will be considered as the odd list. Hence, for all the nodes at even positions, remove it from the odd list and insert it to the front of the even node list. Since the nodes are added at the front, their order will be reversed. Merge the two lists at alternate positions which is the required answer.

Below is the implementation of the above approach.

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Node of the linked list``class` `Node {``public``:``    ``int` `data;``    ``Node* next;``};` `// Function to reverse all the even``// positioned node of given linked list``Node* reverse_even(Node* A)``{``    ``// Stores the nodes with``    ``// even positions``    ``Node* even = NULL;` `    ``// Stores the nodes with``    ``// odd positions``    ``Node* odd = A;` `    ``// If size of list is less that``    ``// 3, no change is required``    ``if` `(!odd || !odd->next || !odd->next->next)``        ``return` `odd;` `    ``// Loop to traverse the list``    ``while` `(odd && odd->next) {` `        ``// Store the even positioned``        ``// node in temp``        ``Node* temp = odd->next;``        ``odd->next = temp->next;` `        ``// Add the even node to the``        ``// beginning of even list``        ``temp->next = even;` `        ``// Make temp as new even list``        ``even = temp;` `        ``// Move odd to it's next node``        ``odd = odd->next;``    ``}` `    ``odd = A;` `    ``// Merge the evenlist into``    ``// odd list alternatively``    ``while` `(even) {` `        ``// Stores the even's next``        ``// node in temp``        ``Node* temp = even->next;` `        ``// Link the next odd node``        ``// to next of even node``        ``even->next = odd->next;` `        ``// Link even to next odd node``        ``odd->next = even;` `        ``// Make new even as temp node``        ``even = temp;` `        ``// Move odd to it's 2nd next node``        ``odd = odd->next->next;``    ``}` `    ``return` `A;``}` `// Function to add a node at``// the beginning of Linked List``void` `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;``}` `// Function to print nodes``// in a given linked list``void` `printList(Node* node)``{``    ``while` `(node != NULL) {``        ``cout << node->data << ``" "``;``        ``node = node->next;``    ``}``}` `// Driver Code``int` `main()``{``    ``Node* start = NULL;` `    ``push(&start, 6);``    ``push(&start, 5);``    ``push(&start, 4);``    ``push(&start, 3);``    ``push(&start, 2);``    ``push(&start, 1);` `    ``start = reverse_even(start);``    ``printList(start);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach` `import` `java.util.*;` `class` `GFG{` `// Node of the linked list``static` `class` `Node {` `    ``int` `data;``    ``Node next;``};``static` `Node start = ``null``;``// Function to reverse all the even``// positioned node of given linked list``static` `Node reverse_even(Node A)``{``    ``// Stores the nodes with``    ``// even positions``    ``Node even = ``null``;` `    ``// Stores the nodes with``    ``// odd positions``    ``Node odd = A;` `    ``// If size of list is less that``    ``// 3, no change is required``    ``if` `(odd==``null` `|| odd.next==``null` `|| odd.next.next==``null``)``        ``return` `odd;` `    ``// Loop to traverse the list``    ``while` `(odd!=``null` `&& odd.next!=``null``) {` `        ``// Store the even positioned``        ``// node in temp``        ``Node temp = odd.next;``        ``odd.next = temp.next;` `        ``// Add the even node to the``        ``// beginning of even list``        ``temp.next = even;` `        ``// Make temp as new even list``        ``even = temp;` `        ``// Move odd to it's next node``        ``odd = odd.next;``    ``}` `    ``odd = A;` `    ``// Merge the evenlist into``    ``// odd list alternatively``    ``while` `(even!=``null``) {` `        ``// Stores the even's next``        ``// node in temp``        ``Node temp = even.next;` `        ``// Link the next odd node``        ``// to next of even node``        ``even.next = odd.next;` `        ``// Link even to next odd node``        ``odd.next = even;` `        ``// Make new even as temp node``        ``even = temp;` `        ``// Move odd to it's 2nd next node``        ``odd = odd.next.next;``    ``}` `    ``return` `A;``}` `// Function to add a node at``// the beginning of Linked List``static` `void` `push(``int` `new_data)``{``    ``Node new_node = ``new` `Node();``    ``new_node.data = new_data;``    ``new_node.next = start;``    ``start = new_node;``}` `// Function to print nodes``// in a given linked list``static` `void` `printList(Node node)``{``    ``while` `(node != ``null``) {``        ``System.out.print(node.data+ ``" "``);``        ``node = node.next;``    ``}``}` `// Driver Code``public` `static` `void` `main(String[] args)``{`` `  `    ``push(``6``);``    ``push(``5``);``    ``push(``4``);``    ``push(``3``);``    ``push(``2``);``    ``push(``1``);` `    ``start = reverse_even(start);``    ``printList(start);` `}``}` `// This code is contributed by 29AjayKumar`

## Python3

 `# Python program for the above approach``start ``=` `None` `# Node of the linked list``class` `Node:``    ``def` `__init__(``self``, data):``        ``self``.data ``=` `data``        ``self``.``next` `=` `None` `# Function to reverse all the even``# positioned node of given linked list``def` `reverse_even(A):``  ` `    ``# Stores the nodes with``    ``# even positions``    ``even ``=` `None` `    ``# Stores the nodes with``    ``# odd positions``    ``odd ``=` `A` `    ``# If size of list is less that``    ``# 3, no change is required``    ``if` `(odd ``=``=` `None` `or` `odd.``next` `=``=` `None` `or` `odd.``next``.``next` `=``=` `None``):``        ``return` `odd` `    ``# Loop to traverse the list``    ``while` `(odd ``and` `odd.``next``):` `        ``# Store the even positioned``        ``# node in temp``        ``temp ``=` `odd.``next``        ``odd.``next` `=` `temp.``next` `        ``# Add the even node to the``        ``# beginning of even list``        ``temp.``next` `=` `even` `        ``# Make temp as new even list``        ``even ``=` `temp` `        ``# Move odd to it's next node``        ``odd ``=` `odd.``next` `    ``odd ``=` `A` `    ``# Merge the evenlist into``    ``# odd list alternatively``    ``while` `(even):` `        ``# Stores the even's next``        ``# node in temp``        ``temp ``=` `even.``next` `        ``# Link the next odd node``        ``# to next of even node``        ``even.``next` `=` `odd.``next` `        ``# Link even to next odd node``        ``odd.``next` `=` `even` `        ``# Make new even as temp node``        ``even ``=` `temp` `        ``# Move odd to it's 2nd next node``        ``odd ``=` `odd.``next``.``next``    ``return` `A` `# Function to add a node at``# the beginning of Linked List``def` `push(new_data):``    ``global` `start``    ``new_node ``=` `Node(new_data)``    ``new_node.``next` `=` `start``    ``start ``=` `new_node` `# Function to print nodes``# in a given linked list``def` `printList(node):``    ``while` `(node !``=` `None``):``        ``print``(node.data, end``=``" "``)``        ``node ``=` `node.``next` `# Driver Code``start ``=` `None` `push(``6``)``push(``5``)``push(``4``)``push(``3``)``push(``2``)``push(``1``)` `start ``=` `reverse_even(start)``printList(start)` `# This code is contributed by saurabh_jaiswal.`

## C#

 `// C# program for the above approach``using` `System;``public` `class` `GFG{` `// Node of the linked list``class` `Node {` `    ``public` `int` `data;``    ``public` `Node next;``};``static` `Node start = ``null``;``  ` `// Function to reverse all the even``// positioned node of given linked list``static` `Node reverse_even(Node A)``{``  ` `    ``// Stores the nodes with``    ``// even positions``    ``Node even = ``null``;` `    ``// Stores the nodes with``    ``// odd positions``    ``Node odd = A;` `    ``// If size of list is less that``    ``// 3, no change is required``    ``if` `(odd==``null` `|| odd.next==``null` `|| odd.next.next==``null``)``        ``return` `odd;` `    ``// Loop to traverse the list``    ``while` `(odd!=``null` `&& odd.next!=``null``) {` `        ``// Store the even positioned``        ``// node in temp``        ``Node temp = odd.next;``        ``odd.next = temp.next;` `        ``// Add the even node to the``        ``// beginning of even list``        ``temp.next = even;` `        ``// Make temp as new even list``        ``even = temp;` `        ``// Move odd to it's next node``        ``odd = odd.next;``    ``}` `    ``odd = A;` `    ``// Merge the evenlist into``    ``// odd list alternatively``    ``while` `(even!=``null``) {` `        ``// Stores the even's next``        ``// node in temp``        ``Node temp = even.next;` `        ``// Link the next odd node``        ``// to next of even node``        ``even.next = odd.next;` `        ``// Link even to next odd node``        ``odd.next = even;` `        ``// Make new even as temp node``        ``even = temp;` `        ``// Move odd to it's 2nd next node``        ``odd = odd.next.next;``    ``}` `    ``return` `A;``}` `// Function to add a node at``// the beginning of Linked List``static` `void` `push(``int` `new_data)``{``    ``Node new_node = ``new` `Node();``    ``new_node.data = new_data;``    ``new_node.next = start;``    ``start = new_node;``}` `// Function to print nodes``// in a given linked list``static` `void` `printList(Node node)``{``    ``while` `(node != ``null``) {``        ``Console.Write(node.data+ ``" "``);``        ``node = node.next;``    ``}``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ``push(6);``    ``push(5);``    ``push(4);``    ``push(3);``    ``push(2);``    ``push(1);` `    ``start = reverse_even(start);``    ``printList(start);` `}``}` `// This code is contributed by shikhasingrajput`

## Javascript

 ``

Output

`1 6 3 4 5 2 `

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

My Personal Notes arrow_drop_up