Reverse the group of even elements in a Linked List

Reverse the group of even elements in a Linked List

Here given code implementation process.

//C Program
//Reverse the group of even elements in a Linked List
#include <stdio.h>
#include <stdlib.h> //for malloc function

//create structure
struct Node
{
  int data;
  struct Node*next;
};

//insert Node element
void insert(struct Node**head,int value)
{
  //Create dynamic node
  struct Node*node=(struct Node*)malloc(sizeof(struct Node));
  if(node==NULL)
  {
    printf("Memory overflow\n");
  }
  else
  {
    node->data=value;
    node->next=NULL;
    if(*head==NULL)
    {
      *head=node;
    }
    else
    {
      struct Node*temp=*head;
      //find last node
      while(temp->next!=NULL)
      {
        temp=temp->next;
      }
      //add node at last possition
      temp->next=node;
    }
  }
}
//Display element of Node
void display(struct Node*temp)
{
  
  if(temp==NULL)
  {
    printf("Empty linked list");
  }
  while(temp!=NULL)
  {
    printf("%d  ",temp->data);
    temp=temp->next;
  }
}
//Reversing the all adjacent Even value nodes
struct Node* reverse(struct Node*head)
{
  if(head==NULL) return NULL;

  struct Node*temp=head,*prev=NULL,*current=NULL;

  while(temp!=NULL)
  {
    if(temp->data%2==0)
    {
      current=temp;
      temp=temp->next;

      current->next=prev;
      prev=current;
    }
    else
    {
      head->next=temp;
      head=prev;
      break;
    }
  }
  return head;

}
void reverse_even(struct Node**head)
{
  
  if(*head==NULL) return;

  struct Node*temp=*head,*auxiliary=NULL;

  while(temp!=NULL && temp->next != NULL)
  {
    if(temp->data%2 == temp->next->data%2)
    {
      if(auxiliary==NULL)
      {
        //modified head of linked list
        *head=reverse(temp);
      }
      else
      {
        //Modify the intermediate nodes of linked list
        auxiliary->next=reverse(temp);
      }
      auxiliary=temp;
    }
    else
    {
      auxiliary=temp;
    }

    temp=temp->next;

  }

}
int main()
{
  //create node pointer
  struct Node*head=NULL;
  //insert element of linked list

  insert(&head,8);
  insert(&head,2);
  insert(&head,6);
  insert(&head,3);
  insert(&head,10);
  insert(&head,6);
  insert(&head,12);
  insert(&head,4);
  insert(&head,5);
  insert(&head,2);


  //display all node
  display(head);

  reverse_even(&head);

  printf("\n");

  display(head);
  return 0;
}

Output

8  2  6  3  10  6  12  4  5  2  
6  2  8  3  4  12  6  10  5  2
//C++ Program 
//Reverse the group of even elements in a Linked List
#include <iostream>
using namespace std;

//Create structure
struct Node
{
  int data;
  struct Node*next;
};
class LinkedList
{

public:
  Node*head;//head node
  LinkedList();
  void insert(int);
  void display();
  void reverse_even();
  Node* reverse(Node*);
};
LinkedList::LinkedList()
{
  head=NULL;
}
//insert node at end of linked list
void LinkedList::insert(int value)
{
  //Create dynamic node
  Node*node=new Node;
  if(node==NULL)
  {
    cout<<"Memory overflow\n";
  }else
  {
    node->data=value;
    node->next=NULL;
    if(head==NULL)
    {
      //base condition
      head=node;
    }else
    {
      Node*temp=head;
      while(temp->next!=NULL)
      {
        temp=temp->next;
      }
      //add newly node at last
      temp->next=node;
    }
  }
}
//display all node value in linked list
void LinkedList:: display()
{
  if(head==NULL)
  {
    cout<<"Empty linked list";
  }
  else
  {
    Node*temp=head;
    cout<<"Linked List : ";
    while(temp!=NULL)
    {
      //print node value
      cout<<temp->data<<" ";
      temp=temp->next;
    }
  }
}
Node* LinkedList :: reverse(Node*head)
{
  if(head==NULL) return NULL;

  Node*temp=head,*prev=NULL,*current=NULL;

  while(temp!=NULL)
  {
    if(temp->data%2==0)
    {
      current=temp;
      temp=temp->next;

      current->next=prev;
      prev=current;
    }
    else
    {
      head->next=temp;
      head=prev;
      break;
    }
  }
  return head;

}
void LinkedList :: reverse_even()
{
  
  if(head==NULL) return;
  
  cout<<"\nReverse group of Even node elements"<<endl;
  Node*temp=head,*auxiliary=NULL;

  while(temp!=NULL && temp->next != NULL)
  {
    if(temp->data%2 == temp->next->data%2)
    {
      if(auxiliary==NULL)
      {
        //modified head of linked list
        head = reverse(temp);
      }
      else
      {
        //Modify the intermediate nodes of linked list
        auxiliary->next=reverse(temp);
      }
      auxiliary=temp;
    }
    else
    {
      auxiliary=temp;
    }

    temp=temp->next;

  }
}
int main()
{
  //create object
  LinkedList obj;

  //insert element of linked list
  obj.insert(8);
  obj.insert(2);
  obj.insert(6);
  obj.insert(3);
  obj.insert(10);
  obj.insert(6);
  obj.insert(12);
  obj.insert(4);
  obj.insert(5);
  obj.insert(2);


  //display all node
  obj.display();

  obj.reverse_even();

  //display all node
  obj.display();
  return 0;
}

Output

Linked List : 8 2 6 3 10 6 12 4 5 2 
Reverse group of Even node elements
Linked List : 6 2 8 3 4 12 6 10 5 2 
//Java program
//Reverse the group of even elements in a Linked List
public class LinkedList
{

  static class Node
  {
    int data;
    Node next;
  }
  public Node head;
  //Class constructors
  LinkedList()
  {
    head=null;
  } 
  //insert  element
  public void insert(int value)
  {
    //Create  node
    Node node=new Node();
    node.data=value;
    node.next=null;
    if(head==null) head=node;
    else
    {
      Node temp=head;
      //find last node
      while(temp.next!=null)
      {
        temp=temp.next;
      }
      temp.next=node;
    }
    
  }
  //Display all Linked List elements
  public void display()
  {
    if(head!=null)
    {
      System.out.print("Linked List Element :");
      Node temp=head;
      while(temp!=null)
      {
        System.out.print("  "+temp.data);
        temp=temp.next;
      }
      System.out.println();
    }
    else
    {
      System.out.println("Empty Linked list"); 
    }
  }
  public Node reverse(Node head)
  {
    if(head==null) return null;

    Node temp=head, prev=null, current=null;

    while(temp!=null)
    {
      if(temp.data%2==0)
      {
        current=temp;
        temp=temp.next;

        current.next=prev;
        prev=current;
      }
      else
      {
        head.next=temp;
        head=prev;
        break;
      }
    }
    return head;

  }
  public void  reverse_even()
  {

    if(head==null) return;

    System.out.println("Reverse group of Even node elements");
    Node temp=head, auxiliary=null;

    while(temp!=null && temp.next != null)
    {
      if(temp.data%2 == temp.next.data%2)
      {
        if(auxiliary==null)
        {
        //modified head of linked list
          head = reverse(temp);
        }
        else
        {
        //Modify the intermediate nodes of linked list
          auxiliary.next=reverse(temp);
        }
        auxiliary=temp;
      }
      else
      {
        auxiliary=temp;
      }

      temp=temp.next;

    }
  }

  public static void main(String[] args) 
  {

    LinkedList obj = new LinkedList();

    //insert element of linked list
    obj.insert(8);
    obj.insert(2);
    obj.insert(6);
    obj.insert(3);
    obj.insert(10);
    obj.insert(6);
    obj.insert(12);
    obj.insert(4);
    obj.insert(5);
    obj.insert(2);


    //display all node
    obj.display();

    obj.reverse_even();

    //display all node
    obj.display();

  }
}

Output

Linked List Element :  8  2  6  3  10  6  12  4  5  2
Reverse group of Even node elements
Linked List Element :  6  2  8  3  4  12  6  10  5  2
Reversing group of even nodes
#Python Program 
#Reverse the group of even elements in a Linked List
class Node:
  def __init__(self,data):
    self.data=data
    self.next=None

#create class Linked    
class LinkedList:

  def __init__(self):

    #Assign default value
    self.head=None

  #insert new node to Linked  
  def insert(self,data):

    node=Node(data)

    if(self.head==None):
      #first element of linked list
      self.head=node
    else:
    
      temp=self.head
      #find middle node of linked list
      while(temp!=None and temp.next!=None ):
        temp=temp.next
      
      #add at last of linked list  
      temp.next=node 
   

  #display all linked list node 
  def display(self):
    temp=self.head
    while(temp!=None):
      print(temp.data,end=" ")
      temp=temp.next
    print()

  def reverse(self,head):
    if(head==None):
      return None

    temp=head 
    prev=None 
    current=None

    while(temp!=None):

      if(temp.data%2==0):

        current=temp
        temp=temp.next

        current.next=prev
        prev=current
      
      else :
        head.next=temp
        head=prev
        break
      
    
    return head

  
  def reverse_even(self):

    if(self.head==None):
      return

    print("Reverse group of Even node elements")
    temp=self.head 
    auxiliary=None

    while(temp!=None  and  temp.next != None):

      if(temp.data%2 == temp.next.data%2):

        if(auxiliary==None):

          #modified head of linked list
          self.head = self.reverse(temp)
        
        else:
          #Modify the intermediate nodes of linked list
          auxiliary.next=self.reverse(temp)
        
        auxiliary=temp
      
      else:
        auxiliary=temp
      

      temp=temp.next

def main():
  obj = LinkedList()
  #insert element of linked list
  obj.insert(8)
  obj.insert(2)
  obj.insert(6)
  obj.insert(3)
  obj.insert(10)
  obj.insert(6)
  obj.insert(12)
  obj.insert(4)
  obj.insert(5)
  obj.insert(2)


  #display all node
  obj.display()

  obj.reverse_even()

  #display all node
  obj.display()

if __name__ =="__main__":
  main()

Output

8 2 6 3 10 6 12 4 5 2 
Reverse group of Even node elements
6 2 8 3 4 12 6 10 5 2 
//C# program
//Reverse the group of even elements in a Linked List
using System;
public class Node
{
  public int data;
  public Node next;
}

public class LinkedList
{

  public Node head;
  //Class constructors
  LinkedList()
  {
    head=null;
  } 
  //insert  element
  public void insert(int value)
  {
    //Create  node
    Node node=new Node();
    node.data=value;
    node.next=null;
    if(head==null) head=node;
    else
    {
      Node temp=head;
      //find last node
      while(temp.next!=null)
      {
        temp=temp.next;
      }
      temp.next=node;
    }

  }
  //Display all Linked List elements
  public void display()
  {
    if(head!=null)
    {
      Console.Write("Linked List Element :");
      Node temp=head;
      while(temp!=null)
      {
        Console.Write("  "+temp.data);
        temp=temp.next;
      }
      Console.WriteLine();
    }
    else
    {
      Console.WriteLine("Empty Linked list"); 
    }
  }
  public Node reverse(Node head)
  {
    if(head==null) return null;

    Node temp=head, prev=null, current=null;

    while(temp!=null)
    {
      if(temp.data%2==0)
      {
        current=temp;
        temp=temp.next;

        current.next=prev;
        prev=current;
      }
      else
      {
        head.next=temp;
        head=prev;
        break;
      }
    }
    return head;

  }
  public void  reverse_even()
  {

    if(head==null) return;

    Console.WriteLine("Reverse group of Even node elements");
    Node temp=head, auxiliary=null;

    while(temp!=null && temp.next != null)
    {
      if(temp.data%2 == temp.next.data%2)
      {
        if(auxiliary==null)
        {
          //modified head of linked list
          head = reverse(temp);
        }
        else
        {
          //Modify the intermediate nodes of linked list
          auxiliary.next=reverse(temp);
        }
        auxiliary=temp;
      }
      else
      {
        auxiliary=temp;
      }

      temp=temp.next;

    }
  }

  public static void Main(String[] args) 
  {

    LinkedList obj = new LinkedList();

    //insert element of linked list
    obj.insert(8);
    obj.insert(2);
    obj.insert(6);
    obj.insert(3);
    obj.insert(10);
    obj.insert(6);
    obj.insert(12);
    obj.insert(4);
    obj.insert(5);
    obj.insert(2);


    //display all node
    obj.display();

    obj.reverse_even();

    //display all node
    obj.display();

  }
}

Output

Linked List Element :  8  2  6  3  10  6  12  4  5  2
Reverse group of Even node elements
Linked List Element :  6  2  8  3  4  12  6  10  5  2
<?php
//Php program 
//Reverse the group of even elements in a Linked List
class Node
{
  public $data;
  public $next;
  function __construct($data)
  {
    $this->data = $data;
    $this->next = NULL;
  }
}
class LinkedList
{

  public $head;
  function __construct()
  {
    $head=NULL;
  }
  /*
  * Append the Given data value at end of linked list
  * Fun : insert
  * Parm: data value
  *@return None
  */
  function insert($data)
  {
    $newNode=new Node($data); 

    if($this->head==NULL)
    {
      $this->head=$newNode;
    }
    else
    {
      $temp=$this->head;

      //find last node of linked list
      while($temp->next!=NULL)
      {
        $temp=$temp->next;
      }
      //add new node to last of linked list
      $temp->next=$newNode;
    }
  }
  //Display all inserted node in linked list
  function display()
  {
    if($this->head==NULL)
    {
      echo "\nEmpty Linked List\n";
    }
    else
    {
      $temp=$this->head;
      echo "\nLinked List :";
      while($temp!=NULL)
      {
        //display node value
        echo "  ".$temp->data;
        $temp=$temp->next; //visit to next node
      }
    }   
  }
  function reverse($head)
  {
    if($head==NULL) return NULL;

    $temp=$head;
    $prev=NULL;
    $current=NULL;

    while($temp!=NULL)
    {
      if($temp->data%2==0)
      {
        $current=$temp;
        $temp=$temp->next;

        $current->next=$prev;
        $prev=$current;
      }
      else
      {
        $head->next=$temp;
        $head=$prev;
        break;
      }
    }
    return $head;

  }
  function reverse_even()
  {

    if($this->head==NULL)
    {
      return;
    }

    echo "\nReverse group of Even node elements";
    $temp=$this->head;
    $auxiliary=NULL;

    while($temp!=NULL && $temp->next != NULL)
    {
      if($temp->data%2 == $temp->next->data%2)
      {
        if($auxiliary==NULL)
        {
        //modified head of linked list
          $this->head = $this->reverse($temp);
        }
        else
        {
        //Modify the intermediate nodes of linked list
          $auxiliary->next=$this->reverse($temp);
        }
        $auxiliary=$temp;
      }
      else
      {
        $auxiliary=$temp;
      }

      $temp=$temp->next;

    }
  }
}
function main()
{
  //Make a object of LinkedList class
  $obj= new LinkedList();

  //insert element of linked list
  $obj->insert(8);
  $obj->insert(2);
  $obj->insert(6);
  $obj->insert(3);
  $obj->insert(10);
  $obj->insert(6);
  $obj->insert(12);
  $obj->insert(4);
  $obj->insert(5);
  $obj->insert(2);


  //display all node
  $obj->display();

  $obj->reverse_even();

  //display all node
  $obj->display();
}
main();
?>

Output

Linked List :  8  2  6  3  10  6  12  4  5  2
Reverse group of Even node elements
Linked List :  6  2  8  3  4  12  6  10  5  2

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment







© 2021, kalkicode.com, All rights reserved