# C - Insert a new node at the end of the Linked List

In this method, a new node is inserted at the end of the linked list. For example - if the given List is 10->20->30 and a new element 100 is added at the end, the Linked List becomes 10->20->30->100.

Inserting a new node at the end of the Linked List is very easy. First, a new node with given element is created. It is then added at the end of the list by linking the last node to the new node.

The function *push_back* is created for this purpose. It is a **6-step process**.

void push_back(struct Node** head_ref, int newElement) { //1. allocate node struct Node *newNode, *temp; newNode = (struct Node*)malloc(sizeof(struct Node)); //2. assign data element newNode->data = newElement; //3. assign null to the next of new node newNode->next = NULL; //4. Check the Linked List is empty or not, // if empty make the new node as head if(*head_ref == NULL) { *head_ref = newNode; } else { //5. Else, traverse to the last node temp = *head_ref; while(temp->next != NULL) { temp = temp->next; } //6. Change the next of last node to new node temp->next = newNode; } }

The below is a complete program that uses above discussed concept to insert new node at the end of the linked list.

#include <stdio.h> #include <stdlib.h> //node structure struct Node { int data; struct Node* next; }; //Add new element at the end of the list void push_back(struct Node** head_ref, int newElement) { struct Node *newNode, *temp; newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = newElement; newNode->next = NULL; if(*head_ref == NULL) { *head_ref = newNode; } else { temp = *head_ref; while(temp->next != NULL) { temp = temp->next; } temp->next = newNode; } } //display the content of the list void PrintList(struct Node* head_ref) { struct Node* temp = head_ref; if(head_ref != NULL) { printf("\nThe list contains: "); while (temp->next != NULL) { printf("%i ",temp->data); temp = temp->next; } printf("%i ",temp->data); } else { printf("\nThe list is empty."); } } // test the code int main() { struct Node* MyList = NULL; //Add three elements at the end of the list. push_back(&MyList, 10); push_back(&MyList, 20); push_back(&MyList, 30); PrintList(MyList); return 0; }

The above code will give the following output:

The list contains: 10 20 30