w3resource

C Exercises: Insert a new node at the beginning of a Singly Linked List


4. Prepend Node Challenges

Write a program in C to insert a new node at the beginning of a Singly Linked List.

Visual Presentation:

C Exercises: Insert a new node at the beginning of a Singly Linked List

Sample Solution:

C Code:

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

struct node 
{
    int num;                    //Data of the node
    struct node *nextptr;       //Address of the node
}*stnode;

void createNodeList(int n);     //function to create the list
void NodeInsertatBegin(int num);	            //function to insert node at the beginning
void displayList();             //function to display the list

int main()
{
    int n,num;
		printf("\n\n Linked List : Insert a new node at the beginning of a Singly Linked List:\n");
		printf("------------------------------------------------------------------------------\n");
    printf(" Input the number of nodes : ");
    scanf("%d", &n);
    createNodeList(n);
    printf("\n Data entered in the list are : \n");		
    displayList();
    printf("\n Input data to insert at the beginning of the list : ");
    scanf("%d", &num);
    NodeInsertatBegin(num);
    printf("\n Data after inserted in the list are : \n");		
    displayList();

    return 0;
}
void createNodeList(int n)
{
    struct node *fnNode, *tmp;
    int num, i;

    stnode = (struct node *)malloc(sizeof(struct node));
    if(stnode == NULL) //check whether the stnode is NULL and if so no memory allocation
    {
        printf(" Memory can not be allocated.");
    }
    else
    {
// reads data for the node through keyboard
        printf(" Input data for node 1 : ");
        scanf("%d", &num);
        stnode-> num = num;      
        stnode-> nextptr = NULL; //Links the address field to NULL
        tmp = stnode;

//Creates n nodes and adds to linked list
        for(i=2; i<=n; i++)
        {
            fnNode = (struct node *)malloc(sizeof(struct node));


            if(fnNode == NULL) //check whether the fnnode is NULL and if so no memory allocation
            {
                printf(" Memory can not be allocated.");
                break;
            }
            else
            {
                printf(" Input data for node %d : ", i);
                scanf(" %d", &num);
                fnNode->num = num;      // links the num field of fnNode with num
                fnNode->nextptr = NULL; // links the address field of fnNode with NULL
                tmp->nextptr = fnNode; // links previous node i.e. tmp to the fnNode
                tmp = tmp->nextptr;
            }
        }
    }
} 

void NodeInsertatBegin(int num)
{
    struct node *fnNode;
    fnNode = (struct node*)malloc(sizeof(struct node));
    if(fnNode == NULL)
    {
        printf(" Memory can not be allocated.");
    }
    else
    {
        fnNode->num = num; //Links the data part
        fnNode->nextptr = stnode; //Links the address part
        stnode = fnNode; //Makes stnode as first node
    }
}

void displayList()
{
    struct node *tmp;
    if(stnode == NULL)
    {
        printf(" No data found in the list.");
    }
    else
    {
        tmp = stnode;
        while(tmp != NULL)
        {
            printf(" Data = %d\n", tmp->num);   // prints the data of current node
            tmp = tmp->nextptr;                 // advances the position of current node
        }
    }
}

Sample Output:

 Linked List : Insert a new node at the beginning of a Singly Linked List:                                    
------------------------------------------------------------------------------                                
 Input the number of nodes : 3                                                                                
 Input data for node 1 : 5                                                                                    
 Input data for node 2 : 6                                                                                    
 Input data for node 3 : 7                                                                                    
                                                                                                              
 Data entered in the list are :                                                                               
 Data = 5                                                                                                     
 Data = 6                                                                                                     
 Data = 7                                                                                                     
                                                                                                              
 Input data to insert at the beginning of the list : 4                                                        
                                                                                                              
 Data after inserted in the list are :                                                                        
 Data = 4                                                                                                     
 Data = 5                                                                                                     
 Data = 6                                                                                                     
 Data = 7

Flowchart:

Flowchart: Insert a new node at the beginning of a Singly Linked List

createNodeList() :

Flowchart: Insert a new node at the beginning of a Singly Linked List

NodeInsertatBegin() :

Flowchart: Insert a new node at the beginning of a Singly Linked List

displayList() :

Flowchart: Insert a new node at the beginning of a Singly Linked List

For more Practice: Solve these Related Problems:

  • Write a C program to insert a new node at the beginning of a singly linked list only if the new node's value is less than the current head's value.
  • Write a C program to add two nodes consecutively at the beginning and then display the updated list.
  • Write a C program to insert a new node at the beginning and then verify the insertion by checking if the head pointer is updated.
  • Write a C program to conditionally prepend a node based on user-defined criteria and display the complete list.

Go to:


PREV : Linked List Node Counter Variants.
NEXT : Append Node Variants.

C Programming Code Editor:



Have another way to solve this solution? Contribute your code (and comments) through Disqus.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.