Reverse the order of all nodes at even position in given Linked List
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++
#include <bits/stdc++.h>
using namespace std;
class Node {
public :
int data;
Node* next;
};
Node* reverse_even(Node* A)
{
Node* even = NULL;
Node* odd = A;
if (!odd || !odd->next || !odd->next->next)
return odd;
while (odd && odd->next) {
Node* temp = odd->next;
odd->next = temp->next;
temp->next = even;
even = temp;
odd = odd->next;
}
odd = A;
while (even) {
Node* temp = even->next;
even->next = odd->next;
odd->next = even;
even = temp;
odd = odd->next->next;
}
return A;
}
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;
}
void printList(Node* node)
{
while (node != NULL) {
cout << node->data << " " ;
node = node->next;
}
}
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
import java.util.*;
class GFG{
static class Node {
int data;
Node next;
};
static Node start = null ;
static Node reverse_even(Node A)
{
Node even = null ;
Node odd = A;
if (odd== null || odd.next== null || odd.next.next== null )
return odd;
while (odd!= null && odd.next!= null ) {
Node temp = odd.next;
odd.next = temp.next;
temp.next = even;
even = temp;
odd = odd.next;
}
odd = A;
while (even!= null ) {
Node temp = even.next;
even.next = odd.next;
odd.next = even;
even = temp;
odd = odd.next.next;
}
return A;
}
static void push( int new_data)
{
Node new_node = new Node();
new_node.data = new_data;
new_node.next = start;
start = new_node;
}
static void printList(Node node)
{
while (node != null ) {
System.out.print(node.data+ " " );
node = node.next;
}
}
public static void main(String[] args)
{
push( 6 );
push( 5 );
push( 4 );
push( 3 );
push( 2 );
push( 1 );
start = reverse_even(start);
printList(start);
}
}
|
Python3
start = None
class Node:
def __init__( self , data):
self .data = data
self . next = None
def reverse_even(A):
even = None
odd = A
if (odd = = None or odd. next = = None or odd. next . next = = None ):
return odd
while (odd and odd. next ):
temp = odd. next
odd. next = temp. next
temp. next = even
even = temp
odd = odd. next
odd = A
while (even):
temp = even. next
even. next = odd. next
odd. next = even
even = temp
odd = odd. next . next
return A
def push(new_data):
global start
new_node = Node(new_data)
new_node. next = start
start = new_node
def printList(node):
while (node ! = None ):
print (node.data, end = " " )
node = node. next
start = None
push( 6 )
push( 5 )
push( 4 )
push( 3 )
push( 2 )
push( 1 )
start = reverse_even(start)
printList(start)
|
C#
using System;
public class GFG{
class Node {
public int data;
public Node next;
};
static Node start = null ;
static Node reverse_even(Node A)
{
Node even = null ;
Node odd = A;
if (odd== null || odd.next== null || odd.next.next== null )
return odd;
while (odd!= null && odd.next!= null ) {
Node temp = odd.next;
odd.next = temp.next;
temp.next = even;
even = temp;
odd = odd.next;
}
odd = A;
while (even!= null ) {
Node temp = even.next;
even.next = odd.next;
odd.next = even;
even = temp;
odd = odd.next.next;
}
return A;
}
static void push( int new_data)
{
Node new_node = new Node();
new_node.data = new_data;
new_node.next = start;
start = new_node;
}
static void printList(Node node)
{
while (node != null ) {
Console.Write(node.data+ " " );
node = node.next;
}
}
public static void Main(String[] args)
{
push(6);
push(5);
push(4);
push(3);
push(2);
push(1);
start = reverse_even(start);
printList(start);
}
}
|
Javascript
<script>
class Node {
constructor(data) {
this .data = data;
this .next = null ;
}
};
function reverse_even(A) {
let even = null ;
let odd = A;
if (odd == null || odd.next == null || odd.next.next == null )
return odd;
while (odd && odd.next) {
let temp = odd.next;
odd.next = temp.next;
temp.next = even;
even = temp;
odd = odd.next;
}
odd = A;
while (even) {
let temp = even.next;
even.next = odd.next;
odd.next = even;
even = temp;
odd = odd.next.next;
}
return A;
}
function push(new_data) {
let new_node = new Node();
new_node.data = new_data;
new_node.next = start;
start = new_node;
}
function printList(node) {
while (node != null ) {
document.write(node.data + " " );
node = node.next;
}
}
let start = null ;
push(6);
push(5);
push(4);
push(3);
push(2);
push(1);
start = reverse_even(start);
printList(start);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...