# Recursive insertion and traversal linked list

• Difficulty Level : Medium
• Last Updated : 30 Nov, 2021

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++

 `// 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;``}`

## Java

 `// 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`

## Python3

 `# 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`

## C#

 `// 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`

## Javascript

 ``

Recursively traversing the list:
The idea is simple, we print current node and recur for remaining list.

## 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);``}`

## Java

 `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`

## Python3

 `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`

## C#

 `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++

 `// Recursive C++ program to recursively insert``// a node and recursively print the list.``#include ``using` `namespace` `std;``struct` `Node {``    ``int` `data;``    ``Node* next;``};` `// Allocates a new node with given data``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.``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 code``int` `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);``}`

## Java

 `// 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`

## Python3

 `# 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 data``def` `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 code``if` `__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`

## C#

 `// 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`

## Javascript

 ``

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.