# Create a Singly Linked List from an array

Suppose we have an int array and we want to create it into a singly linked list from it.

Our Node structure is,

```struct node
{
Â Â  Â int value;
Â Â  Â node * nextPtr;Â Â  Â
Â Â  Â node(int val)
Â Â  Â {
Â Â  Â Â Â  Â value = val;
Â Â  Â Â Â  Â nextPtr = NULL;Â Â  Â
Â Â  Â }
};
```

We will use our new function like this,

```Â Â  Â int arr[] = {1,2,3,4, 89,1,1,1,0};
Â Â  Â node * ptr = createListFromArray(arr, sizeof(arr)/sizeof(int));
```

In this createListFromArray function we will pass array pointer and size of array.
Then we will iterate the array one by one and create a node for each element and append it in last node’s next pointer.
We also keep a track of last node created while iteration to update its next pointer. Besides this, we will also store the first node created,
that we will return in end.
Check out the Code,

```node * createListFromArray(int * ptr, int arraySize)
{
Â Â  Â node * nodePtr = NULL;
Â Â  Â node * rootNodePtr = NULL;
Â Â  Â node * lastNodePtr = NULL;
Â Â  Â for(int i = 0 ; i < arraySize; i++)
Â Â  Â {
Â Â  Â Â Â  Â if(!nodePtr)
Â Â  Â Â Â  Â {
Â Â  Â Â Â  Â Â Â  Â nodePtr = new node(*(ptr+i));
Â Â  Â Â Â  Â Â Â  Â if(!rootNodePtr)
Â Â  Â Â Â  Â Â Â  Â Â Â  Â rootNodePtr = nodePtr;Â Â  Â
Â Â  Â Â Â  Â Â Â  Â if(lastNodePtr)Â Â  Â
Â Â  Â Â Â  Â Â Â  Â Â Â  Â lastNodePtr->nextPtr = nodePtr;
Â Â  Â Â Â  Â }
Â Â  Â Â Â  Â lastNodePtr = nodePtr;
Â Â  Â Â Â  Â nodePtr = nodePtr->nextPtr;
Â Â  Â }
Â Â  Â return rootNodePtr;
}
```

Full Code example is as follows,

[code language=”cpp”]
#include <iostream>
/*
Â * Node will contain and int variable as value
Â * and a node pointer to next Node.
Â **/
struct node
{
Â Â  Â int value;
Â Â  Â node * nextPtr;Â Â  Â
Â Â  Â node(int val)
Â Â  Â {
Â Â  Â Â Â  Â value = val;
Â Â  Â Â Â  Â nextPtr = NULL;Â Â  Â
Â Â  Â }
};
/*
Â * Iterate the passed array one by one and create a node
Â * for each element and append it in last node’s next pointer.
Â * Also keep a track of last node created while iteration to
Â * update its next pointer in next iteration.
Â * Also store the first node created,that we will returned as
Â * root node in end.
**/
node * createListFromArray(int * ptr, int arraySize)
{
Â Â  Â node * nodePtr = NULL;
Â Â  Â node * rootNodePtr = NULL;
Â Â  Â node * lastNodePtr = NULL;
Â Â  Â for(int i = 0 ; i < arraySize; i++)
Â Â  Â {
Â Â  Â Â Â  Â if(!nodePtr)
Â Â  Â Â Â  Â {
Â Â  Â Â Â  Â Â Â  Â nodePtr = new node(*(ptr+i));
Â Â  Â Â Â  Â Â Â  Â if(!rootNodePtr)
Â Â  Â Â Â  Â Â Â  Â Â Â  Â rootNodePtr = nodePtr;Â Â  Â
Â Â  Â Â Â  Â Â Â  Â if(lastNodePtr)Â Â  Â
Â Â  Â Â Â  Â Â Â  Â Â Â  Â lastNodePtr->nextPtr = nodePtr;
Â Â  Â Â Â  Â }
Â Â  Â Â Â  Â lastNodePtr = nodePtr;
Â Â  Â Â Â  Â nodePtr = nodePtr->nextPtr;
Â Â  Â }
Â Â  Â return rootNodePtr;
}
/*
Â * Store the next pointer of passed node as temp variable.
Â * Delete the current pointer and pass the earlier stored next pointer
Â * to destroyList funtion.
Â *
Â * If ptr is null it means its the end of linked list, so just return
Â * because complete linked list is deleted.
Â **/
void destroyList(node * ptr)
{
Â Â  Â if(ptr)
Â Â  Â {
Â Â  Â Â Â  Â node * pNext = ptr->nextPtr;
Â Â  Â Â Â  Â delete ptr;
Â Â  Â Â Â  Â destroyList(pNext);
Â Â  Â }
}
/*
Â * Iterate through all nodes and display content
Â * of each node untill end of linked list is reached.
Â **/
{
Â Â  Â while(ptr != NULL)
Â Â  Â {
Â Â  Â Â Â  Â std::cout<<ptr->value<<" ";
Â Â  Â Â Â  Â ptr = ptr->nextPtr;
Â Â  Â }
Â Â  Â std::cout<<std::endl;
}
/*
Â * Testing functions.
Â **/
int main()
{
Â Â  Â int arr[] = {1,2,3,4, 89,1,1,1,0};
Â Â  Â node * ptr = createListFromArray(arr, sizeof(arr)/sizeof(int));