Skip to main content

Print linked list from middle into left-right order

Displaying middle left-right sequence

Here given code implementation process.

//C Program
//Print linked list from middle into left-right order
#include<stdio.h>
#include <stdlib.h> //for malloc function

//create structure
struct Node
{
  int data;
  struct Node*next;
};
//function prototype
void insert(struct Node**,int);
void display(struct Node*);
//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("%3d",temp->data);
    temp=temp->next;
  }
}
//Print linked list element in left-right order at middle position
void show(struct Node*head,struct Node*slow,struct Node**middle)
{

  if(head==NULL) return;

  if(head->next != NULL && head->next->next != NULL)
  {
    //Until the not get middle elements
    show(head->next->next,slow->next,middle);
  }
  else if(head->next!=NULL && head->next->next==NULL)
  {
    //When even number of elements
    *middle=(slow)->next;
  }
  
  printf("%3d",(slow)->data );

  if(*middle !=NULL)
  {
    printf("%3d",(*middle)->data );
    *middle=(*middle)->next;
  }
  else
  {
     *middle=slow->next;
  }
}
int main()
{
  //create node pointer
  struct Node*head=NULL;
  
  //insert element of linked list

  insert(&head,1);
  insert(&head,2);
  insert(&head,3);
  insert(&head,4);
  insert(&head,5);
  insert(&head,6);
  insert(&head,7);
  insert(&head,8);

  printf("\n Nodes :");
  //display all node
  display(head);
  printf("\n O / P :");

  struct Node*middle=NULL;
  
  show(head,head,&middle);

  //case 2
  struct Node*root=NULL;
  insert(&root,1);
  insert(&root,2);
  insert(&root,3);
  insert(&root,4);
  insert(&root,5);
  insert(&root,6);
  insert(&root,7);


  middle=NULL;

  printf("\n Nodes :");
  display(root);

  printf("\n O / P :");
  show(root,root,&middle);
  return 0;

}

Output

 Nodes :  1  2  3  4  5  6  7  8
 O / P :  4  5  3  6  2  7  1  8
 Nodes :  1  2  3  4  5  6  7
 O / P :  4  3  5  2  6  1  7
//C++ Program 
//Delete a node from linked list without head pointer
#include <iostream>
using namespace std;

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

public:
  Node*head;//head pointer
  LinkedList();
  void insert(int);
  void display();
  void show( Node*, Node*, Node**);
};
LinkedList::LinkedList()
{
  head=NULL;
}
//insert node at end of linked list
void LinkedList::insert(int value)
{
    //Create dynamic node
  struct 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<<"\nLinked List : ";
    while(temp!=NULL)
    {
      //print node value
      cout<<temp->data<<"  ";
      temp=temp->next;
    }
    cout<<endl;
  }
}

//Print linked list element in left-right order at middle position
void LinkedList:: show( Node*head, Node*slow, Node**middle)
{

  if(head==NULL) return;

  if(head->next != NULL && head->next->next != NULL)
  {
    //Until the not get middle elements
    show(head->next->next,slow->next,middle);
  }
  else if(head->next!=NULL && head->next->next==NULL)
  {
    //When even number of elements
    *middle=(slow)->next;
  }
  
  cout<<slow->data << "  ";

  if(*middle !=NULL)
  {
    cout<<(*middle)->data<< "  ";
    *middle=(*middle)->next;
  }
  else
  {
    *middle=slow->next;
  }
}
int main()
{

  //create object
  LinkedList obj;
  //insert element of linked list

  obj.insert(1);
  obj.insert(2);
  obj.insert(3);
  obj.insert(4);
  obj.insert(5);
  obj.insert(6);
  obj.insert(7);
  obj.insert(8);

  //display all node
  obj.display();
  cout<<(" O / P :  ");

  Node*middle=NULL;
  
  obj.show(obj.head,obj.head,&middle);

  //case 2
  LinkedList root;
  root.insert(1);
  root.insert(2);
  root.insert(3);
  root.insert(4);
  root.insert(5);
  root.insert(6);
  root.insert(7);


  middle=NULL;

  root.display();

  cout<<(" O / P :  ");
  root.show(root.head,root.head,&middle);
  return 0;
}

Output

Linked List : 1  2  3  4  5  6  7  8  
 O / P :  4  5  3  6  2  7  1  8  
Linked List : 1  2  3  4  5  6  7  
 O / P :  4  3  5  2  6  1  7 
//Java Program
//Print linked list from middle into left-right order
public class LinkedList
{

  static class Node
  {
    int data;
    Node next;
  }
  public Node head,middle;
  //Class constructors
  LinkedList()
  {
    head=null;
    middle=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)
    {
      Node temp=head;
      while(temp!=null)
      {
        System.out.print("  "+temp.data);
        temp=temp.next;
      }
      System.out.println();
    }else
    {
      System.out.println("Empty Linked list"); 
    }
  }
  
  //Print linked list element in left-right order at middle position
  public void show( Node head, Node slow)
  {

    if(head==null) return;

    if(head.next != null && head.next.next != null)
    {
      //Until the not get middle elements
      show(head.next.next,slow.next);
    }
    else if(head.next!=null && head.next.next==null)
    {
      //When even number of elements
      middle = slow.next;
    }
    
    System.out.print("  "+slow.data);

    if( middle != null)
    {
      System.out.print("  "+middle.data);
      middle=( middle).next;
    }
    else
    {
      middle=slow.next;
    }
  }
  
  public void  left_right()
  {

    middle=null;

    show(head,head);
  }



  public static void main(String[] args) 
  {

    LinkedList obj=new LinkedList();
    obj.insert(1);
    obj.insert(2);
    obj.insert(3);
    obj.insert(4);
    obj.insert(5);
    obj.insert(6);
    obj.insert(7);
    obj.insert(8);

    System.out.println("\n Nodes :");
    //display all node
    obj.display();
    System.out.println(" O / P :");
    obj.left_right();

    //case 2
    LinkedList root=new LinkedList();
    root.insert(1);
    root.insert(2);
    root.insert(3);
    root.insert(4);
    root.insert(5);
    root.insert(6);
    root.insert(7);


    System.out.println("\n Nodes :");
    root.display();

    System.out.println(" O / P :");
    root.left_right();

  }
}

Output

 Nodes :
  1  2  3  4  5  6  7  8
 O / P :
  4  5  3  6  2  7  1  8
 Nodes :
  1  2  3  4  5  6  7
 O / P :
  4  3  5  2  6  1  7
#Python Program
#Print linked list from middle into left-right order
class Node:
  def __init__(self,data):
    self.data=data
    self.next=None

#Create Class LinkedList    
class LinkedList:
  def __init__(self):
    #Assign default value
    self.head=None
    self.middle=None

  #insert new node to linked list  
  def insert(self,data):
    node=Node(data)
    node.next=None
    if self.head==None:
      self.head=node
    else:
      temp=self.head
      while temp.next!=None:
          temp=temp.next
      #add node    
      temp.next=node

  def display(self):
    if(self.head==None):
      print("Empty Linked List")
      return

    temp=self.head
    
    while(temp!=None):
      print(temp.data,end="  ")
      temp=temp.next
  

  def show(self,head,slow):
    if(head==None) :
      return;

    if(head.next != None and head.next.next != None):
      #Until the not get middle elements
      self.show(head.next.next,slow.next);
    
    elif(head.next != None and head.next.next == None):
      #When even number of elements
      self.middle = slow.next;
    
    
    print(slow.data,end="  ");

    if(self.middle != None):
      print(self.middle.data,end="  ");
      self.middle = self.middle.next;
    
    else:
      self.middle=slow.next;
    
  
  
  def leftRight(self):

    self.middle=None;

    self.show(self.head,self.head);
  
      
    

def main():
    #Create Object of class Linked
    obj=LinkedList();
    obj.insert(1);
    obj.insert(2);
    obj.insert(3);
    obj.insert(4);
    obj.insert(5);
    obj.insert(6);
    obj.insert(7);
    obj.insert(8);

    print("\nNodes :");
    #display all node
    obj.display();
    print("\nO / P :");
    obj.leftRight();

    #case 2
    root=LinkedList();
    root.insert(1);
    root.insert(2);
    root.insert(3);
    root.insert(4);
    root.insert(5);
    root.insert(6);
    root.insert(7);


    print("\nNodes :");
    root.display();

    print("\nO / P :");
    root.leftRight();
if __name__=="__main__":
    main()

Output

Nodes :
1  2  3  4  5  6  7  8  
O / P :
4  5  3  6  2  7  1  8  
Nodes :
1  2  3  4  5  6  7  
O / P :
4  3  5  2  6  1  7 
//C# Program
//Print linked list from middle into left-right order

using System;
public class Node
{
  public int data;
  public Node next;
}

public class LinkedList
{


  public Node head,middle;
  //Class constructors
  LinkedList()
  {
    head=null;
    middle=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)
    {
      Node temp=head;
      while(temp!=null)
      {
        Console.Write("  "+temp.data);
        temp=temp.next;
      }
      Console.WriteLine();
    }else
    {
      Console.WriteLine("Empty Linked list"); 
    }
  }

  //Print linked list element in left-right order at middle position
  public void show( Node head, Node slow)
  {

    if(head==null) return;

    if(head.next != null && head.next.next != null)
    {
      //Until the not get middle elements
      show(head.next.next,slow.next);
    }
    else if(head.next!=null && head.next.next==null)
    {
      //When even number of elements
      middle = slow.next;
    }

    Console.Write("  "+slow.data);

    if( middle != null)
    {
      Console.Write("  "+middle.data);
      middle=( middle).next;
    }
    else
    {
      middle=slow.next;
    }
  }

  public void  left_right()
  {

    middle=null;

    show(head,head);
  }



  public static void Main(String[] args) 
  {

    LinkedList obj=new LinkedList();
    obj.insert(1);
    obj.insert(2);
    obj.insert(3);
    obj.insert(4);
    obj.insert(5);
    obj.insert(6);
    obj.insert(7);
    obj.insert(8);

    Console.WriteLine("\n Nodes :");
    //display all node
    obj.display();
    Console.WriteLine(" O / P :");
    obj.left_right();

    //case 2
    LinkedList root=new LinkedList();
    root.insert(1);
    root.insert(2);
    root.insert(3);
    root.insert(4);
    root.insert(5);
    root.insert(6);
    root.insert(7);


    Console.WriteLine("\n Nodes :");
    root.display();

    Console.WriteLine(" O / P :");
    root.left_right();

  }
}

Output

 Nodes :
  1  2  3  4  5  6  7  8
 O / P :
  4  5  3  6  2  7  1  8
 Nodes :
  1  2  3  4  5  6  7
 O / P :
  4  3  5  2  6  1  7
<?php
//Php program 
//Print linked list from middle into left-right order
class Node
{
  public $data;
  public $next;
  function __construct($data)
  {
    $this->data = $data;
    $this->next = NULL;
  }
}
class LinkedList
{

  public $head;
  public $middle;
  function __construct()
  {
    $head = NULL;
    $middle = 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 "Empty Linked List";
      }
      else{
        $temp=$this->head;
        echo "\nLinked List :";
        while($temp!=NULL)
        {
          //display node value
          echo "  ".$temp->data;
          $temp=$temp->next; //visit to next node
        }
      }   
    }
    //Delete a node in linked list
    function delete_node($element)
    {
      if($element == NULL) return;

      if($element->next==NULL)
      {
        echo("\nNot Possible to delete Last node without head node\n");
      }
      else
      {

        $element->data = $element->next->data;

        $temp=$element->next;

        $element->next=$temp->next;

        if($this->head==$temp)
        {
        //when delete first node
        //You can also remove this condition
          $this->head=$this->head->next;
        }
        $temp=NULL;
      }
    }
    //Print linked list element in left-right order at middle position
    function show($head,$slow)
    {

      if($head==NULL) return;

      if($head->next != NULL && $head->next->next != NULL)
      {
        //Until the not get middle elements
        $this->show($head->next->next,$slow->next);
      }
      else if($head->next!=NULL && $head->next->next==NULL)
      {
        //When even number of elements
        $this->middle=$slow->next;
      }

      echo "  ".$slow->data;

      if($this->middle !=NULL)
      {
        echo "  ".$this->middle->data;
$this->middle=$this->middle->next;
}
else
{
  $this->middle= $slow->next;
}
}
function  left_right()
{

  $this->middle=NULL;

  $this->show($this->head,$this->head);
}

}


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

    /*
    *Insert following nodes in linked list
    */
    $obj->insert(1);
    $obj->insert(2);
    $obj->insert(3);
    $obj->insert(4);
    $obj->insert(5);
    $obj->insert(6);
    $obj->insert(7);
    $obj->insert(8);

    //display all node
    $obj->display();
    echo ("\n O / P :  ");
    $obj->left_right();




    //Case 2
    $root=new LinkedList();
    $root->insert(1);
    $root->insert(2);
    $root->insert(3);
    $root->insert(4);
    $root->insert(5);
    $root->insert(6);
    $root->insert(7);

    $root->display();

    echo ("\n O / P :  ");
    $root->left_right();

  }
  main();
  ?>

Output

Linked List :  1  2  3  4  5  6  7  8
 O / P :    4  5  3  6  2  7  1  8
Linked List :  1  2  3  4  5  6  7
 O / P :    4  3  5  2  6  1  7




Comment

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