import java.util.*;
class GFG
{
static class node
{
int data;
node next;
};
static node newNode( int d)
{
node newnode = new node();
newnode.data = d;
newnode.next = null ;
return newnode;
}
static node reverse(node head, node prev)
{
if (head == null )
return null ;
node temp;
node curr;
curr = head;
while (curr != null && curr.data % 2 == 0 )
{
temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
if (curr != head)
{
head.next = curr;
curr = reverse(curr, null );
return prev;
}
else
{
head.next = reverse(head.next, head);
return head;
}
}
static void printLinkedList(node head)
{
while (head != null )
{
System.out.print(head.data + " " );
head = head.next;
}
}
public static void main(String[] args)
{
int arr[] = { 1 , 2 , 3 , 3 , 4 , 6 , 8 , 5 };
int n = arr.length;
node head = null ;
node p = new node();
for ( int i = 0 ; i < n; i++)
{
if (head == null )
{
p = newNode(arr[i]);
head = p;
continue ;
}
p.next = newNode(arr[i]);
p = p.next;
}
head = reverse(head, null );
printLinkedList(head);
}
}
|
Python
# Python implementation of the approach
# Node of a linked list
class Node:
def __init__(self, next = None, data = None):
self.next = next
self.data = data
# Function to create a new node
def newNode( d):
newnode = Node()
newnode.data = d
newnode.next = None
return newnode
# Recursive function to reverse the consecutive
# even nodes of the linked list
def reverse(head, prev):
# Base case
if (head == None):
return None
temp = None
curr = None
curr = head
# Reversing nodes until curr node's value
# turn odd or Linked list is fully traversed
while (curr != None and curr.data % 2 == 0) :
temp = curr.next
curr.next = prev
prev = curr
curr = temp
# If elements were reversed then head
# pointer needs to be changed
if (curr != head) :
head.next = curr
# Recur for the remaining linked list
curr = reverse(curr, None)
return prev
# Simply iterate over the odd value nodes
else:
head.next = reverse(head.next, head)
return head
# Utility function to print the
# contents of the linked list
def printLinkedList(head):
while (head != None):
print(head.data ,end= " ")
head = head.next
# Driver code
arr = [ 1, 2, 3, 3, 4, 6, 8, 5 ]
n = len(arr)
head = None
p = Node()
i = 0
# Constructing linked list
while ( i < n ):
if (head == None):
p = newNode(arr[i])
head = p
else:
p.next = newNode(arr[i])
p = p.next
i = i + 1;
# Head of the updated linked list
head = reverse(head, None)
# Printing the reversed linked list
printLinkedList(head)
# This code is contributed by Arnab Kundu