Skip to content
Related Articles

Related Articles

Improve Article
Print alternate nodes of a linked list using recursion
  • Difficulty Level : Basic
  • Last Updated : 28 May, 2021

Given a linked list, print alternate nodes of this linked list.
Examples : 
 

Input : 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10
Output : 1 -> 3 -> 5 -> 7 -> 9 

Input : 10 -> 9
Output : 10

 

Recursive Approach : 
1. Initialize a static variable(say flag) 
2. If flag is odd print the node 
3. increase head and flag by 1, and recurse for next nodes.
 

C++




// CPP code to print alternate nodes
// of a linked list using recursion
#include <bits/stdc++.h>
using namespace std;
 
// A linked list node
struct Node {
    int data;
    struct Node* next;
};
 
// Inserting node at the beginning
void push(struct Node** head_ref, int new_data)
{
    struct Node* new_node =
       (struct Node*)malloc(sizeof(struct Node));
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}
 
// Function to print alternate nodes of linked list.
// The boolean flag isOdd is used to find if the current
// node is even or odd.
void printAlternate(struct Node* node, bool isOdd=true)
{
    if (node == NULL)
       return;
    if (isOdd == true)
        cout << node->data << " ";
    printAlternate(node->next, !isOdd);
}
 
// Driver code
int main()
{
    // Start with the empty list
    struct Node* head = NULL;
 
    // construct below list
    // 1->2->3->4->5->6->7->8->9->10
 
    push(&head, 10);
    push(&head, 9);
    push(&head, 8);
    push(&head, 7);
    push(&head, 6);
    push(&head, 5);
    push(&head, 4);
    push(&head, 3);
    push(&head, 2);
    push(&head, 1);
 
    printAlternate(head);
 
    return 0;
}

Java




// Java code to print alternate nodes
// of a linked list using recursion
class GFG
{
 
// A linked list node
static class Node
{
    int data;
    Node next;
};
 
// Inserting node at the beginning
static Node 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;
    return head_ref;
}
 
// Function to print alternate nodes of linked list.
// The boolean flag isOdd is used to find if the current
// node is even or odd.
static void printAlternate( Node node, boolean isOdd)
{
    if (node == null)
    return;
    if (isOdd == true)
        System.out.print( node.data + " ");
    printAlternate(node.next, !isOdd);
}
 
// Driver code
public static void main(String args[])
{
    // Start with the empty list
    Node head = null;
 
    // con below list
    // 1.2.3.4.5.6.7.8.9.10
 
    head = push(head, 10);
    head = push(head, 9);
    head = push(head, 8);
    head = push(head, 7);
    head = push(head, 6);
    head = push(head, 5);
    head = push(head, 4);
    head = push(head, 3);
    head = push(head, 2);
    head = push(head, 1);
 
    printAlternate(head,true);
 
}
}
 
// This code is contributed by Arnab Kundu

Python3




# Python3 code to print alternate nodes
# of a linked list using recursion
 
# A linked list node
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
 
# Inserting node at the beginning
def push( head_ref, new_data):
 
    new_node = Node(new_data);
    new_node.data = new_data;
    new_node.next = head_ref;
    head_ref = new_node;
    return head_ref;
 
# Function to print alternate nodes of
# linked list. The boolean flag isOdd
# is used to find if the current node
# is even or odd.
def printAlternate( node, isOdd):
    if (node == None):
        return;
    if (isOdd == True):
        print( node.data, end = " ");
    if (isOdd == True):
        isOdd = False;
    else:
        isOdd = True;
    printAlternate(node.next, isOdd);
 
# Driver code
 
# Start with the empty list
head = None;
 
# con below list
# 1->2->3->4->5->6->7->8->9->10
head = push(head, 10);
head = push(head, 9);
head = push(head, 8);
head = push(head, 7);
head = push(head, 6);
head = push(head, 5);
head = push(head, 4);
head = push(head, 3);
head = push(head, 2);
head = push(head, 1);
 
printAlternate(head, True);
 
# This code is contributed by 29AjayKumar

C#




// C# code to print alternate nodes
// of a linked list using recursion
using System;
 
class GFG
{
  
// A linked list node
public class Node
{
    public int data;
    public Node next;
};
  
// Inserting node at the beginning
static Node 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;
    return head_ref;
}
  
// Function to print alternate nodes of linked list.
// The boolean flag isOdd is used to find if the current
// node is even or odd.
static void printAlternate( Node node, bool isOdd)
{
    if (node == null)
    return;
    if (isOdd == true)
        Console.Write( node.data + " ");
    printAlternate(node.next, !isOdd);
}
  
// Driver code
public static void Main(String []args)
{
    // Start with the empty list
    Node head = null;
  
    // con below list
    // 1.2.3.4.5.6.7.8.9.10
  
    head = push(head, 10);
    head = push(head, 9);
    head = push(head, 8);
    head = push(head, 7);
    head = push(head, 6);
    head = push(head, 5);
    head = push(head, 4);
    head = push(head, 3);
    head = push(head, 2);
    head = push(head, 1);
  
    printAlternate(head,true);
  
}
}
 
// This code has been contributed by 29AjayKumar

Javascript




<script>
// javascript code to prvar alternate nodes
// of a linked list using recursion     // A linked list node
class Node {
    constructor(val) {
        this.data = val;
        this.next = null;
    }
}
 
 
    // Inserting node at the beginning
    function push(head_ref , new_data) {
var new_node = new Node();
        new_node.data = new_data;
        new_node.next = (head_ref);
        (head_ref) = new_node;
        return head_ref;
    }
 
    // Function to prvar alternate nodes of linked list.
    // The boolean flag isOdd is used to find if the current
    // node is even or odd.
    function printAlternate(node,  isOdd) {
        if (node == null)
            return;
        if (isOdd == true)
            document.write(node.data + " ");
        printAlternate(node.next, !isOdd);
    }
 
    // Driver code
     
        // Start with the empty list
var head = null;
 
        // con below list
        // 1.2.3.4.5.6.7.8.9.10
 
        head = push(head, 10);
        head = push(head, 9);
        head = push(head, 8);
        head = push(head, 7);
        head = push(head, 6);
        head = push(head, 5);
        head = push(head, 4);
        head = push(head, 3);
        head = push(head, 2);
        head = push(head, 1);
 
        printAlternate(head, true);
 
// This code contributed by umadevi9616
</script>
Output: 
1 3 5 7 9

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes




My Personal Notes arrow_drop_up
Recommended Articles
Page :