inserting a node at the end of a linked list

The new node will be added at the end of the linked list.




Example

Input

Linked List : 10 20 30 40 NULL.

50

Output

Linked List : 10 20 30 40 50 NULL.


Input

Linked List : NULL

10

Output

Linked List : 10 NULL




Algorithm

1. Declare head pointer and make it as NULL.


2. Create a new node with the given data. And make the new node => next as NULL.
    (Because the new node is going to be the last node.)


3. If the head node is NULL (Empty Linked List),

         make the new node as the head.


4. If the head node is not null, (Linked list already has some elements),

         find the last node.

         make the last node => next as the new node.




1. Declare head pointer and make it as NULL.

struct node
{
    int data;
    struct node *next;
};

struct node *head = NULL;



2. Create a new node

void addLast(struct node **head, int val)
{
    //create a new node
    struct node *newNode = malloc(sizeof(struct node));
    newNode->data = val;
    newNode->next = NULL;
}



3. If the head node is NULL, make the new node as head

void addLast(struct node **head, int val)
{
    //create a new node
    struct node *newNode = malloc(sizeof(struct node));
    newNode->data = val;
    newNode->next     = NULL;

    
//if head is NULL, it is an empty list if(*head == NULL) *head = newNode;
}

Visual Representation

Let's insert data 10.

linked list add 10 at the end

The head is NULL initially.

1. The new node with data as 10 and reference is NULL (address 1024).

2. Since it is the first node, make the head node points to the newly allocated node.




4. Otherwise, find the last node and set last node => new node

The last node of a linked list has the reference pointer as NULL. i.e. node=>next = NULL.

To find the last node, we have to iterate the linked till the node=>next != NULL.

Pseudocode

while(node->next != NULL)
{
    node = node->next;
}

After that, we have to make the last node-> next as the new node. i.e. last node->next = new node;


void addLast(struct node **head, int val)
{
    //create a new node
    struct node *newNode = malloc(sizeof(struct node));
    newNode->data = val;
    newNode->next     = NULL;

    //if head is NULL, it is an empty list
    if(*head == NULL)
         *head = newNode;
    //Otherwise, find the last node and add the newNode
    else
    {
        struct node *lastNode = *head;
        
//last node's next address will be NULL. while(lastNode->next != NULL) { lastNode = lastNode->next; } //add the newNode at the end of the linked list lastNode->next = newNode;
} }

Visual Representation

Let's insert data 20.

linked list add 20 at the end

1. The head points to the memory address 1024 and it is the last node.

2. The new node with data as 20 and reference is NULL (address 2024).

set last node =>next = new node. The new node added at the end of the linked list.

3. Finally, the new linked list.


Let's insert data 30.

linked list add 30 at the end

1. The head points to the memory address 1024 and it has two nodes.

2. The new node with data as 30 and reference is NULL (address 3024).

Find the last node using the loop and make the last node points to the newly allocated node.

In our case, the last node is 20 (address 2024). So, last->next = 30 (address 3024).

3. Finally, the new linked list.




Implementation of inserting a node at the end of a linked list

Example

#include<stdio.h>
#include<stdlib.h>

struct node
{
    int data;
    struct node *next;
};

void addLast(struct node **head, int val) { //create a new node struct node *newNode = malloc(sizeof(struct node)); newNode->data = val; newNode->next = NULL; //if head is NULL, it is an empty list if(*head == NULL) *head = newNode; //Otherwise, find the last node and add the newNode else { struct node *lastNode = *head; //last node's next address will be NULL. while(lastNode->next != NULL) { lastNode = lastNode->next; } //add the newNode at the end of the linked list lastNode->next = newNode; } }
void printList(struct node *head) { struct node *temp = head; //iterate the entire linked list and print the data while(temp != NULL) { printf("%d->", temp->data); temp = temp->next; } printf("NULL\n"); } int main() { struct node *head = NULL; addLast(&head,10); addLast(&head,20); addLast(&head,30); printList(head); return 0; }