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++
Node* insertEnd(Node* head, int data)
{
if (head == NULL)
return newNode(data);
else
head->next = insertEnd(head->next, data);
return head;
}
|
Java
static Node insertEnd(Node head, int data)
{
if (head == null )
return newNode(data);
else
head.next = insertEnd(head.next, data);
return head;
}
|
Python3
def insertEnd(head, data):
if (head = = None ):
return newNode(data)
else :
head. next = insertEnd(head. next , data)
return head
|
C#
static Node insertEnd(Node head, int data)
{
if (head == null )
return newNode(data);
else
head.next = insertEnd(head.next, data);
return head;
}
|
Javascript
<script>
function insertEnd(head , data)
{
if (head == null )
{
return newNode(data);
}
else
{
head.next = insertEnd(head.next, data);
}
return head;
}
</script>
|
Time Complexity: O(N) where N is the number of nodes in given linked list.
Auxiliary Space: O(N) due to recursion call stack.
Recursively traversing the list:
The idea is simple, we print current node and recur for remaining list.
Implementation:
C++
void traverse(Node* head)
{
if (head == NULL)
return ;
cout << head->data << " " ;
traverse(head->next);
}
|
Java
static void traverse(Node head)
{
if (head == null )
return ;
System.out.print( head.data + " " );
traverse(head.next);
}
|
Python3
def traverse(head):
if (head = = None ):
return
print (head.data, end = " " );
traverse(head. next )
|
C#
static void traverse(Node head)
{
if (head == null )
return ;
Console.Write(head.data + " " );
traverse(head.next);
}
|
Javascript
function traverse(head){
if (head == null )
return ;
console.log(head.data + " " );
traverse(head.next);
}
|
Complete Program: Below is complete program to demonstrate working of insert and traverse a linked list.
C++
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
Node* next;
};
Node *newNode( int data)
{
Node *new_node = new Node;
new_node->data = data;
new_node->next = NULL;
return new_node;
}
Node* insertEnd(Node* head, int data)
{
if (head == NULL)
return newNode(data);
else
head->next = insertEnd(head->next, data);
return head;
}
void traverse(Node* head)
{
if (head == NULL)
return ;
cout << head->data << " " ;
traverse(head->next);
}
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
public class GFG {
static class Node {
int data;
Node next;
};
static Node newNode( int data){
Node new_node = new Node();
new_node.data = data;
new_node.next = null ;
return new_node;
}
static Node insertEnd(Node head, int data){
if (head == null )
return newNode(data);
else
head.next = insertEnd(head.next, data);
return head;
}
static void traverse(Node head){
if (head == null )
return ;
System.out.print(head.data + " " );
traverse(head.next);
}
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);
}
}
|
Python3
import math
class Node:
def __init__( self , data):
self .data = data
self . next = None
def newNode(data):
new_node = Node(data)
new_node.data = data
new_node. next = None
return new_node
def insertEnd(head, data):
if (head = = None ):
return newNode(data)
else :
head. next = insertEnd(head. next , data)
return head
def traverse(head):
if (head = = None ):
return
print (head.data, end = " " );
traverse(head. next )
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)
|
C#
using System;
class GFG
{
public class Node
{
public int data;
public Node next;
};
static Node newNode( int data)
{
Node new_node = new Node();
new_node.data = data;
new_node.next = null ;
return new_node;
}
static Node insertEnd(Node head, int data)
{
if (head == null )
return newNode(data);
else
head.next = insertEnd(head.next, data);
return head;
}
static void traverse(Node head)
{
if (head == null )
return ;
Console.Write(head.data + " " );
traverse(head.next);
}
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);
}
}
|
Javascript
<script>
class Node
{
constructor(data) {
this .next = null ;
this .data = data;
}
}
function newNode(data)
{
let new_node = new Node(data);
return new_node;
}
function insertEnd(head, data)
{
if (head == null )
return newNode(data);
else
head.next = insertEnd(head.next, data);
return head;
}
function traverse(head)
{
if (head == null )
return ;
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);
</script>
|
Time Complexity: O(N), to traverse the linked list of size N.
Auxiliary Space: O(N), for recursion call stack
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.