Create linked list from a given array
Last Updated :
01 Aug, 2024
Improve
Try it on GfG Practice
Given an array arr[] of size N. The task is to create linked list from the given array.
Examples:
Input : arr[] = {1, 2, 3, 4, 5}
Output : 1->2->3->4->5
Input :arr[] = {10, 11, 12, 13, 14}
Output : 10->11->12->13->14
Simple Approach: For each element of an array arr[] we create a node in a linked list and insert it at the end.
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
Node(int d)
{
data = d;
next = NULL;
}
};
// Function to insert node at the end
Node* insertEnd(Node* root, int item)
{
Node* temp = new Node(item);
if (root == NULL)
return temp;
Node* last = root;
while (last->next != NULL) {
last = last->next;
}
last->next = temp;
return root;
}
Node* arrayToList(int arr[], int n)
{
Node* root = NULL;
for (int i = 0; i < n; i++) {
root = insertEnd(root, arr[i]);
}
return root;
}
void display(Node* root)
{
while (root != NULL) {
cout << root->data << " ";
root = root->next;
}
}
// Driver code
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
Node* root = arrayToList(arr, n);
display(root);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* createNode(int data) {
struct Node* newNode =
(struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// Function to insert node at the end
struct Node* insertEnd(struct Node* root, int item) {
struct Node* temp = createNode(item);
if (root == NULL)
return temp;
struct Node* last = root;
while (last->next != NULL)
last = last->next;
last->next = temp;
return root;
}
struct Node* arrayToList(int arr[], int n) {
struct Node* root = NULL;
for (int i = 0; i < n; i++) {
root = insertEnd(root, arr[i]);
}
return root;
}
void display(struct Node* root) {
while (root != NULL) {
printf("%d ", root->data);
root = root->next;
}
}
// Driver code
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
struct Node* root = arrayToList(arr, n);
display(root);
return 0;
}
class Node {
int data;
Node next;
Node(int d) {
data = d;
next = null;
}
}
class GfG {
public static Node insertEnd(Node root, int item) {
Node temp = new Node(item);
if (root == null) {
return temp;
}
Node last = root;
while (last.next != null) {
last = last.next;
}
last.next = temp;
return root;
}
public static Node arrayToList(int[] arr) {
Node root = null;
for (int i = 0; i < arr.length; i++) {
root = insertEnd(root, arr[i]);
}
return root;
}
public static void display(Node root) {
while (root != null) {
System.out.print(root.data + " ");
root = root.next;
}
}
// Driver code
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
Node root = arrayToList(arr);
display(root);
}
}
class Node:
def __init__(self, data):
self.data = data
self.next = None
def insert_end(root, item):
temp = Node(item)
if root is None:
return temp
last = root
while last.next is not None:
last = last.next
last.next = temp
return root
def array_to_list(arr):
root = None
for item in arr:
root = insert_end(root, item)
return root
def display(root):
while root is not None:
print(root.data, end=" ")
root = root.next
# Driver code
if __name__ == "__main__":
arr = [1, 2, 3, 4, 5]
root = array_to_list(arr)
display(root)
using System;
class Node {
public int data;
public Node next;
public Node(int d) {
data = d;
next = null;
}
}
class GfG {
public static Node InsertEnd(Node root, int item) {
Node temp = new Node(item);
if (root == null) {
return temp;
}
Node last = root;
while (last.next != null) {
last = last.next;
}
last.next = temp;
return root;
}
public static Node ArrayToList(int[] arr) {
Node root = null;
for (int i = 0; i < arr.Length; i++) {
root = InsertEnd(root, arr[i]);
}
return root;
}
public static void Display(Node root) {
while (root != null) {
Console.Write(root.data + " ");
root = root.next;
}
}
// Driver code
public static void Main(string[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
Node root = ArrayToList(arr);
Display(root);
}
}
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
function insertEnd(root, item) {
const temp = new Node(item);
if (root === null) {
return temp;
}
let last = root;
while (last.next !== null) {
last = last.next;
}
last.next = temp;
return root;
}
function arrayToList(arr) {
let root = null;
for (let i = 0; i < arr.length; i++) {
root = insertEnd(root, arr[i]);
}
return root;
}
function display(root) {
while (root !== null) {
process.stdout.write(root.data + " ");
root = root.next;
}
}
// Example usage
const arr = [1, 2, 3, 4, 5];
const root = arrayToList(arr);
display(root);
Output
1 2 3 4 5
Time Complexity : O(n*n)
Efficient Approach: We traverse array from end and insert every element at the beginning of the list.
#include <iostream>
using namespace std;
// Representation of a node
struct Node {
int data;
Node* next;
Node(int d){
data = d;
next = NULL;
}
};
// Function to insert node
void insert(Node** root, int item)
{
Node* temp = new Node(item);
temp->next = *root;
*root = temp;
}
void display(Node* root)
{
while (root != NULL) {
cout << root->data << " ";
root = root->next;
}
}
Node *arrayToList(int arr[], int n)
{
Node *root = NULL;
for (int i = n-1; i >= 0 ; i--)
insert(&root, arr[i]);
return root;
}
// Driver code
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
Node* root = arrayToList(arr, n);
display(root);
return 0;
}
// Java program to print level order traversal
// in spiral form using one queue and one stack.
import java.util.*;
class GFG
{
// Representation of a node
static class Node
{
int data;
Node next;
Node (int d) {
data = d;
next = null;
}
};
static Node root;
// Function to insert node
static Node insert(Node root, int item)
{
Node temp = new Node(item);
temp.next = root;
root = temp;
return root;
}
static void display(Node root)
{
while (root != null)
{
System.out.print(root.data + " ");
root = root.next;
}
}
static Node arrayToList(int arr[], int n)
{
root = null;
for (int i = n - 1; i >= 0 ; i--)
root = insert(root, arr[i]);
return root;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 1, 2, 3, 4, 5 };
int n = arr.length;
Node root = arrayToList(arr, n);
display(root);
}
}
# Python3 program to print level order traversal
# in spiral form using one queue and one stack.
# Representation of a Node
class Node:
def __init__(self, data):
self.data = data
self.next = next
# Function to insert Node
def insert(root, item):
temp = Node(0)
temp.data = item
temp.next = root
root = temp
return root
def display(root):
while (root != None):
print(root.data, end=" ")
root = root.next
def arrayToList(arr, n):
root = None
for i in range(n - 1, -1, -1):
root = insert(root, arr[i])
return root
# Driver code
if __name__ == '__main__':
arr = [1, 2, 3, 4, 5];
n = len(arr)
root = arrayToList(arr, n);
display(root)
# This code is contributed by 29AjayKumar
// C# program to print level order traversal
// in spiral form using one queue and one stack.
using System;
class GFG
{
// Representation of a node
public class Node
{
public int data;
public Node next;
};
static Node root;
// Function to insert node
static Node insert(Node root, int item)
{
Node temp = new Node();
temp.data = item;
temp.next = root;
root = temp;
return root;
}
static void display(Node root)
{
while (root != null)
{
Console.Write(root.data + " ");
root = root.next;
}
}
static Node arrayToList(int []arr, int n)
{
root = null;
for (int i = n - 1; i >= 0 ; i--)
root = insert(root, arr[i]);
return root;
}
// Driver code
public static void Main(String[] args)
{
int []arr = { 1, 2, 3, 4, 5 };
int n = arr.Length;
Node root = arrayToList(arr, n);
display(root);
}
}
// This code is contributed by Rajput-Ji
// JavaScript program to print level order traversal
// in spiral form using one queue and one stack.
// Representation of a node
class Node {
constructor()
{
this.data = 0;
this.next = null;
}
}
var root;
// Function to insert node
function insert(root, item)
{
var temp = new Node();
temp.data = item;
temp.next = root;
root = temp;
return root;
}
function display(root)
{
while (root != null) {
console.log(root.data + " ");
root = root.next;
}
}
function arrayToList(arr, n)
{
root = null;
for (var i = n - 1; i >= 0; i--)
root = insert(root, arr[i]);
return root;
}
// Driver code
var arr = [ 1, 2, 3, 4, 5 ];
var n = arr.length;
var root = arrayToList(arr, n);
display(root);
Output
1 2 3 4 5
Time Complexity : O(n)
Alternate Efficient Solution is maintain tail pointer, traverse array elements from left to right, insert at tail and update tail after insertion.