Recursive insertion and traversal linked list

03 Jul, 2022
We have discussed different methods of linked list insertion. How to recursively create a linked list?
Recursively inserting at the end: To create a Linked list using recursion follow these steps. Below steps insert a new node recursively at the end of linked list.  
C++
Java
Python3
C#
Javascript
// Function to insert a new node at the// end of linked list using recursion.Node* insertEnd(Node* head, int data){    // If linked list is empty, create a     // new node (Assuming newNode() allocates    // a new node with given data)    if (head == NULL)          return newNode(data);      // If we have not reached end, keep traversing    // recursively.    else         head->next = insertEnd(head->next, data);    return head;}
// Function to insert a new node at the// end of linked list using recursion.static Node insertEnd(Node head, int data){        // If linked list is empty, create a     // new node (Assuming newNode() allocates    // a new node with given data)    if (head == null)          return newNode(data);       // If we have not reached end, keep traversing    // recursively.    else        head.next = insertEnd(head.next, data);        return head;}  // This code is contributed by rutvik_56
# Function to insert a new node at the# end of linked list using recursion.def insertEnd(head, data):        # If linked list is empty, create a     # new node (Assuming newNode() allocates    # a new node with given data)    if (head == None):        return newNode(data)       # If we have not reached end,     # keep traversing recursively.    else:        head.next = insertEnd(head.next, data)              return head  # This code is contributed by divyeshrabadiya07
// Function to insert a new node at the  // end of linked list using recursion.  static Node insertEnd(Node head, int data)  {          // If linked list is empty, create a      // new node (Assuming newNode() allocates      // a new node with given data)      if (head == null)          return newNode(data);          // If we have not reached end, keep traversing      // recursively.      else        head.next = insertEnd(head.next, data);          return head;  }  // This code is contributed by divyesh072019
<script>  // Function to insert a new node at the// end of linked list using recursion.function insertEnd(head , data){          // If linked list is empty, create a     // new node (Assuming newNode() allocates    // a new node with given data)    if (head == null)     {        return newNode(data);    }      // If we have not reached end, keep traversing    // recursively.    else    {        head.next = insertEnd(head.next, data);    }    return head;}  // This code is contributed by shubhamsingh10  </script>
Recursively traversing the list: The idea is simple, we print current node and recur for remaining list.  
C++
Java
Python3
C#
void traverse(Node* head){    if (head == NULL)       return;          // If head is not NULL, print current node    // and recur for remaining list       cout << head->data << " ";      traverse(head->next);}
static void traverse(Node head) {     if (head == null)     return;           // If head is not null, print current node     // and recur for remaining list     System.out.print( head.data + " ");       traverse(head.next); }   // This code is contributed by SUBHAMSINGH10
def traverse(head):    if (head == None):        return           # If head is not None, print current node    # and recur for remaining list     print(head.data, end = " ");    traverse(head.next)          # This code is contributed by Pratham76
static void traverse(Node head) {     if (head == null)     return;           // If head is not null, print current node     // and recur for remaining list     Console.Write(head.data + " ");       traverse(head.next); }
 Complete Program: Below is complete program to demonstrate working of insert and traverse a linked list. 
C++
Java
Python3
C#
Javascript
// Recursive C++ program to recursively insert// a node and recursively print the list.#include <bits/stdc++.h>using namespace std;struct Node {    int data;    Node* next;};  // Allocates a new node with given dataNode *newNode(int data){    Node *new_node = new Node;    new_node->data = data;    new_node->next = NULL;    return new_node;}  // Function to insert a new node at the// end of linked list using recursion.Node* insertEnd(Node* head, int data){    // If linked list is empty, create a     // new node (Assuming newNode() allocates    // a new node with given data)    if (head == NULL)          return newNode(data);      // If we have not reached end, keep traversing    // recursively.    else         head->next = insertEnd(head->next, data);    return head;}  void traverse(Node* head){    if (head == NULL)       return;          // If head is not NULL, print current node    // and recur for remaining list       cout << head->data << " ";      traverse(head->next);}  // Driver codeint main(){    Node* head = NULL;    head = insertEnd(head, 6);    head = insertEnd(head, 8);    head = insertEnd(head, 10);    head = insertEnd(head, 12);    head = insertEnd(head, 14);    traverse(head);}
// Recursive Java program to recursively insert // a node and recursively print the list. class GFG{      static class Node {     int data;     Node next; };   // Allocates a new node with given data static Node newNode(int data) {     Node new_node = new Node();     new_node.data = data;     new_node.next = null;     return new_node; }   // Function to insert a new node at the // end of linked list using recursion. static Node insertEnd(Node head, int data) {     // If linked list is empty, create a     // new node (Assuming newNode() allocates     // a new node with given data)     if (head == null)         return newNode(data);       // If we have not reached end, keep traversing     // recursively.     else        head.next = insertEnd(head.next, data);     return head; }   static void traverse(Node head) {     if (head == null)     return;           // If head is not null, print current node     // and recur for remaining list     System.out.print( head.data + " ");       traverse(head.next); }   // Driver code public static void main(String args[]){     Node head = null;     head = insertEnd(head, 6);     head = insertEnd(head, 8);     head = insertEnd(head, 10);     head = insertEnd(head, 12);     head = insertEnd(head, 14);     traverse(head); } }  // This code is contributed by andrew1234
# Recursive Python3 program to # recursively insert a node and# recursively print the list.import math  class Node:     def __init__(self, data):         self.data = data         self.next = None  # Allocates a new node with given datadef newNode(data):    new_node = Node(data)    new_node.data = data    new_node.next = None    return new_node  # Function to insert a new node at the# end of linked list using recursion.def insertEnd(head, data):          # If linked list is empty, create a     # new node (Assuming newNode() allocates    # a new node with given data)    if (head == None):        return newNode(data)      # If we have not reached end,     # keep traversing recursively.    else:        head.next = insertEnd(head.next, data)    return head  def traverse(head):    if (head == None):        return          # If head is not None, print current node    # and recur for remaining list     print(head.data, end = " ");    traverse(head.next)  # Driver codeif __name__=='__main__':     head = None    head = insertEnd(head, 6)    head = insertEnd(head, 8)    head = insertEnd(head, 10)    head = insertEnd(head, 12)    head = insertEnd(head, 14)    traverse(head)  # This code is contributed by sapna singh
// Recursive C# program to recursively insert // a node and recursively print the list. using System;   class GFG {       public class Node {     public int data;     public Node next; };   // Allocates a new node with given data static Node newNode(int data) {     Node new_node = new Node();     new_node.data = data;     new_node.next = null;     return new_node; }   // Function to insert a new node at the // end of linked list using recursion. static Node insertEnd(Node head, int data) {     // If linked list is empty, create a     // new node (Assuming newNode() allocates     // a new node with given data)     if (head == null)         return newNode(data);       // If we have not reached end, keep traversing     // recursively.     else        head.next = insertEnd(head.next, data);     return head; }   static void traverse(Node head) {     if (head == null)     return;           // If head is not null, print current node     // and recur for remaining list     Console.Write(head.data + " ");       traverse(head.next); }   // Driver code public static void Main(String []args) {     Node head = null;     head = insertEnd(head, 6);     head = insertEnd(head, 8);     head = insertEnd(head, 10);     head = insertEnd(head, 12);     head = insertEnd(head, 14);     traverse(head); } }   // This code is contributed by 29AjayKumar
<script>    // Recursive Javascript program to recursively insert    // a node and recursively print the list.          class Node    {        constructor(data) {           this.next = null;           this.data = data;        }    }          // Allocates a new node with given data    function newNode(data)    {        let new_node = new Node(data);        return new_node;    }      // Function to insert a new node at the    // end of linked list using recursion.    function insertEnd(head, data)    {        // If linked list is empty, create a        // new node (Assuming newNode() allocates        // a new node with given data)        if (head == null)            return newNode(data);          // If we have not reached end, keep traversing        // recursively.        else            head.next = insertEnd(head.next, data);        return head;    }      function traverse(head)    {        if (head == null)            return;          // If head is not null, print current node        // and recur for remaining list        document.write(head.data + " ");          traverse(head.next);    }          let head = null;    head = insertEnd(head, 6);    head = insertEnd(head, 8);    head = insertEnd(head, 10);    head = insertEnd(head, 12);    head = insertEnd(head, 14);    traverse(head);  // This code is contributed by mukesh07.</script>
Output: 
6 8 10 12 14
This article is contributed by AMIT KUMAR. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
andrew1234
29AjayKumar
sapnasingh4991
rutvik_56
divyesh072019
divyeshrabadiya07
pratham76
SHUBHAMSINGH10
mukesh07
Linked List
Recursion
Linked List
Recursion
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
LinkedList in Java
Introduction to Data Structures
Doubly Linked List | Set 1 (Introduction and Insertion)
Merge two sorted linked lists
What is Data Structure: Types, Classifications and Applications
Write a program to print all permutations of a given string
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Recursion
Program for Tower of Hanoi
Backtracking | Introduction