[Naive Approach] Sequential insertion at the end of a linked list (using traversal)
For each element of an array arr[] we create a node in a linked list and insert it at the end.
C++
#include<iostream>#include<vector>usingnamespacestd;// Definition of a Node in a singly linked listclassNode{public:intdata;Node*next;Node(intd){data=d;next=NULL;}};// Function to insert node at the endNode*insertEnd(Node*root,intitem){Node*temp=newNode(item);if(root==NULL)returntemp;Node*last=root;while(last->next!=NULL){last=last->next;}last->next=temp;returnroot;}// Function to convert vector to linked listNode*arrayToList(vector<int>&arr,intn){Node*root=NULL;for(inti=0;i<n;i++){root=insertEnd(root,arr[i]);}returnroot;}// Function to display linked listvoiddisplay(Node*root){while(root!=NULL){cout<<root->data;if(root->next!=NULL)cout<<" -> ";root=root->next;}}intmain(){vector<int>arr={1,2,3,4,5};intn=arr.size();Node*root=arrayToList(arr,n);display(root);return0;}
Java
classNode{intdata;Nodenext;Node(intd){data=d;next=null;}}classGfG{// Function to insert node at the endstaticNodeinsertEnd(Noderoot,intitem){Nodetemp=newNode(item);if(root==null)returntemp;Nodelast=root;while(last.next!=null){last=last.next;}last.next=temp;returnroot;}// Function to convert array to linked liststaticNodearrayToList(intarr[],intn){Noderoot=null;for(inti=0;i<n;i++){root=insertEnd(root,arr[i]);}returnroot;}staticvoiddisplay(Noderoot){while(root!=null){System.out.print(root.data);if(root.next!=null)System.out.print(" -> ");root=root.next;}}publicstaticvoidmain(String[]args){intarr[]={1,2,3,4,5};intn=arr.length;Noderoot=arrayToList(arr,n);display(root);}}
Python
classNode:def__init__(self,d):self.data=dself.next=None# Function to insert node at the enddefinsertEnd(root,item):temp=Node(item)ifrootisNone:returntemplast=rootwhilelast.nextisnotNone:last=last.nextlast.next=tempreturnroot# Function to convert array to linked listdefarrayToList(arr,n):root=Noneforiinrange(n):root=insertEnd(root,arr[i])returnrootdefdisplay(root):whilerootisnotNone:print(root.data,end="")ifroot.nextisnotNone:print(" -> ",end="")root=root.nextif__name__=="__main__":arr=[1,2,3,4,5]n=len(arr)root=arrayToList(arr,n)display(root)
C#
usingSystem;classNode{publicintdata;publicNodenext;publicNode(intd){data=d;next=null;}}classGfG{// Function to insert node at the endstaticNodeinsertEnd(Noderoot,intitem){Nodetemp=newNode(item);if(root==null)returntemp;Nodelast=root;while(last.next!=null){last=last.next;}last.next=temp;returnroot;}// Function to convert array to linked liststaticNodearrayToList(int[]arr,intn){Noderoot=null;for(inti=0;i<n;i++){root=insertEnd(root,arr[i]);}returnroot;}staticvoiddisplay(Noderoot){while(root!=null){Console.Write(root.data);if(root.next!=null)Console.Write(" -> ");root=root.next;}}staticvoidMain(string[]args){int[]arr={1,2,3,4,5};intn=arr.Length;Noderoot=arrayToList(arr,n);display(root);}}
JavaScript
classNode{constructor(d){this.data=d;this.next=null;}}// Function to insert node at the endfunctioninsertEnd(root,item){lettemp=newNode(item);if(root===null)returntemp;letlast=root;while(last.next!==null){last=last.next;}last.next=temp;returnroot;}// Function to convert array to linked listfunctionarrayToList(arr,n){letroot=null;for(leti=0;i<n;i++){root=insertEnd(root,arr[i]);}returnroot;}functiondisplay(root){while(root!==null){process.stdout.write(root.data.toString());if(root.next!==null)process.stdout.write(" -> ");root=root.next;}}// Driver codeletarr=[1,2,3,4,5];letn=arr.length;letroot=arrayToList(arr,n);display(root);
Output
1 -> 2 -> 3 -> 4 -> 5
Time Complexity: O(n*n) Auxiliary Space: O(1)
[Expected Approach] Insertion at the beginning
C++
#include<iostream>usingnamespacestd;// Representation of a nodeclassNode{public:intdata;Node*next;Node(intd){data=d;next=NULL;}};// Function to insert node at the beginningvoidinsert(Node**root,intitem){Node*temp=newNode(item);temp->next=*root;*root=temp;}// Function to display linked listvoiddisplay(Node*root){while(root!=NULL){cout<<root->data<<" ";root=root->next;}}// Convert array to linked listNode*arrayToList(intarr[],intn){Node*root=NULL;for(inti=n-1;i>=0;i--){insert(&root,arr[i]);}returnroot;}intmain(){intarr[]={1,2,3,4,5};intn=sizeof(arr)/sizeof(arr[0]);Node*root=arrayToList(arr,n);display(root);return0;}
Java
classGFG{// Representation of a nodestaticclassNode{intdata;Nodenext;Node(intd){data=d;next=null;}};staticNoderoot;// Function to insert nodestaticNodeinsert(Noderoot,intitem){Nodetemp=newNode(item);temp.next=root;root=temp;returnroot;}staticvoiddisplay(Noderoot){while(root!=null){System.out.print(root.data+" ");root=root.next;}}staticNodearrayToList(intarr[],intn){root=null;for(inti=n-1;i>=0;i--)root=insert(root,arr[i]);returnroot;}publicstaticvoidmain(String[]args){intarr[]={1,2,3,4,5};intn=arr.length;Noderoot=arrayToList(arr,n);display(root);}}
Python
# Representation of a Node classNode:def__init__(self,data):self.data=dataself.next=next# Function to insert Node definsert(root,item):temp=Node(0)temp.data=itemtemp.next=rootroot=tempreturnrootdefdisplay(root):while(root!=None):print(root.data,end=" ")root=root.nextdefarrayToList(arr,n):root=Noneforiinrange(n-1,-1,-1):root=insert(root,arr[i])returnrootif__name__=='__main__':arr=[1,2,3,4,5];n=len(arr)root=arrayToList(arr,n);display(root)
C#
usingSystem;classGFG{// Representation of a nodepublicclassNode{publicintdata;publicNodenext;};staticNoderoot;// Function to insert nodestaticNodeinsert(Noderoot,intitem){Nodetemp=newNode();temp.data=item;temp.next=root;root=temp;returnroot;}staticvoiddisplay(Noderoot){while(root!=null){Console.Write(root.data+" ");root=root.next;}}staticNodearrayToList(int[]arr,intn){root=null;for(inti=n-1;i>=0;i--)root=insert(root,arr[i]);returnroot;}publicstaticvoidMain(String[]args){int[]arr={1,2,3,4,5};intn=arr.Length;Noderoot=arrayToList(arr,n);display(root);}}
JavaScript
// Representation of a nodeclassNode{constructor(){this.data=0;this.next=null;}}varroot;// Function to insert nodefunctioninsert(root,item){vartemp=newNode();temp.data=item;temp.next=root;root=temp;returnroot;}functiondisplay(root){while(root!=null){console.log(root.data+" ");root=root.next;}}functionarrayToList(arr,n){root=null;for(vari=n-1;i>=0;i--)root=insert(root,arr[i]);returnroot;}// Driver codevararr=[1,2,3,4,5];varn=arr.length;varroot=arrayToList(arr,n);display(root);
Output
1 2 3 4 5
Time Complexity : O(n) Auxiliary Space : O(1)
Alternate Efficient Solution is maintain tail pointer, traverse array elements from left to right, insert at tail and update tail after insertion.