Quantcast
Channel: C Programming Archives - QnA Plus
Viewing all articles
Browse latest Browse all 93

C Program Insert Element in a Singly Linked List

$
0
0

Following C programs show how to insert elements in a singly linked list, at the front, end or a specified location.
Insert at the front of the list

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

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

void print_list(struct node *head)
{
    printf("H->");

    while(head)
    {
        printf("%d->", head->val);
        head = head->next;
    }

    printf("|||\n");
}

void insert_front(struct node **head, int value)
{
    struct node * new_node = NULL;

    new_node = (struct node *)malloc(sizeof(struct node));

    if (new_node == NULL)
    {
        printf("Failed to insert element. Out of memory");
    }

    new_node->val = value;
    new_node->next = *head;

    *head = new_node;
}

void main()
{
    int count = 0, i, val;
    struct node * head = NULL;

    printf("Enter number of elements: ");
    scanf("%d", &count);

    for (i = 0; i < count; i++)
    {
        printf("Enter %dth element: ", i);
        scanf("%d", &val);
        insert_front(&head, val);
    }

    printf("Initial List: ");
    print_list(head);

    printf("Enter a value to enter at the front of the list: ");
    scanf("%d", &val);
    insert_front(&head, val);

    printf("List after insertion: ");
    print_list(head);
}

Output:

Enter number of elements: 5
Enter 0th element: 4
Enter 1th element: 53
Enter 2th element: 56
Enter 3th element: 76
Enter 4th element: 34
Initial List: H->34->76->56->53->4->|||
Enter a value to enter at the front of the list: 10
List after insertion: H->10->34->76->56->53->4->|||

Insert at the end of the list

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

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

void print_list(struct node *head)
{
    printf("H->");

    while(head)
    {
        printf("%d->", head->val);
        head = head->next;
    }

    printf("|||\n");
}

void insert_front(struct node **head, int value)
{
    struct node * new_node = NULL;

    new_node = (struct node *)malloc(sizeof(struct node));

    if (new_node == NULL)
    {
        printf("Failed to insert element. Out of memory");
    }

    new_node->val = value;
    new_node->next = *head;

    *head = new_node;
}

void insert_end(struct node **head, int value)
{
    struct node * new_node = NULL;
    struct node * last = NULL;

    new_node = (struct node *)malloc(sizeof(struct node));

    if (new_node == NULL)
    {
        printf("Failed to insert element. Out of memory");
    }

    new_node->val = value;
    new_node->next = NULL;

    if( *head == NULL)
    {
        *head = new_node;
        return;
    }

    last = *head;
    while(last->next) last = last->next;

    last->next = new_node;
}

void main()
{
    int count = 0, i, val;
    struct node * head = NULL;

    printf("Enter number of elements: ");
    scanf("%d", &count);

    for (i = 0; i < count; i++)
    {
        printf("Enter %dth element: ", i);
        scanf("%d", &val);
        insert_front(&head, val);
    }

    printf("Initial List: ");
    print_list(head);

    printf("Enter a value to enter at the end of the list: ");
    scanf("%d", &val);
    insert_end(&head, val);

    printf("List after insertion: ");
    print_list(head);
}

Output:

Enter number of elements: 5
Enter 0th element: 6
Enter 1th element: 56
Enter 2th element: 34
Enter 3th element: 4
Enter 4th element: 56
Initial List: H->56->4->34->56->6->|||
Enter a value to enter at the front of the list: 10
List after insertion: H->56->4->34->56->6->10->|||

Insert an element after a specified node.

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

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

struct node * find_node(struct node *head, int val)
{
    struct node *tmp = head;

    while(tmp)
    {
        if (tmp->val == val) return tmp; /*Found*/

        tmp = tmp->next;
    }

    return NULL; /*Not found*/
}

void print_list(struct node *head)
{
    printf("H->");

    while(head)
    {
        printf("%d->", head->val);
        head = head->next;
    }

    printf("|||\n");
}

void insert_front(struct node **head, int value)
{
    struct node * new_node = NULL;

    new_node = (struct node *)malloc(sizeof(struct node));

    if (new_node == NULL)
    {
        printf("Failed to insert element. Out of memory");
    }

    new_node->val = value;
    new_node->next = *head;

    *head = new_node;
}

void insert_after(struct node *pos, int value)
{
    struct node * new_node = NULL;

    if (pos == NULL) return;

    new_node = (struct node *)malloc(sizeof(struct node));

    if (new_node == NULL)
    {
        printf("Failed to insert element. Out of memory");
    }

    new_node->val = value;
    new_node->next = pos->next;
    pos->next = new_node;
}

void main()
{
    int count = 0, i, val, pos;
    struct node * head = NULL;

    printf("Enter number of elements: ");
    scanf("%d", &count);

    for (i = 0; i < count; i++)
    {
        printf("Enter %dth element: ", i);
        scanf("%d", &val);
        insert_front(&head, val);
    }

    printf("Initial List: ");
    print_list(head);

    printf("Enter a value to insert in the list: ");
    scanf("%d", &val);

    printf("Insert after: ");
    scanf("%d", &pos);

    insert_after(find_node(head, pos), val);

    printf("List after insertion: ");
    print_list(head);
}

Output:

Enter number of elements: 5
Enter 0th element: 34
Enter 1th element: 53
Enter 2th element: 5
Enter 3th element: 6
Enter 4th element: 34
Initial List: H->34->6->5->53->34->|||
Enter a value to insert in the list: 10
Insert after: 6
List after insertion: H->34->6->10->5->53->34->|||

Insert an element before a specified node.

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

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

struct node * find_node(struct node *head, int val)
{
    struct node *tmp = head;

    while(tmp)
    {
        if (tmp->val == val) return tmp; /*Found*/

        tmp = tmp->next;
    }

    return NULL; /*Not found*/
}

void print_list(struct node *head)
{
    printf("H->");

    while(head)
    {
        printf("%d->", head->val);
        head = head->next;
    }

    printf("|||\n");
}

void insert_front(struct node **head, int value)
{
    struct node * new_node = NULL;

    new_node = (struct node *)malloc(sizeof(struct node));

    if (new_node == NULL)
    {
        printf("Failed to insert element. Out of memory");
    }

    new_node->val = value;
    new_node->next = *head;

    *head = new_node;
}

void insert_before(struct node **head, struct node *pos, int value)
{
    struct node * new_node = NULL;
    struct node * tmp_node = NULL;

    if (pos == NULL) return;

    new_node = (struct node *)malloc(sizeof(struct node));

    if (new_node == NULL)
    {
        printf("Failed to insert element. Out of memory");
    }

    new_node->val = value;

    if(*head == pos)
    {
        new_node->next = pos;
        *head = new_node;
        return;
    }

    tmp_node = *head;

    while(tmp_node->next != pos)
    {
        tmp_node = tmp_node->next;

        if(tmp_node == NULL) return; /*Not found*/
    }

    new_node->next = tmp_node->next;
    tmp_node->next = new_node;
}

void main()
{
    int count = 0, i, val, pos;
    struct node * head = NULL;

    printf("Enter number of elements: ");
    scanf("%d", &count);

    for (i = 0; i < count; i++)
    {
        printf("Enter %dth element: ", i);
        scanf("%d", &val);
        insert_front(&head, val);
    }

    printf("Initial List: ");
    print_list(head);

    printf("Enter a value to insert in the list: ");
    scanf("%d", &val);

    printf("Insert before: ");
    scanf("%d", &pos);

    insert_before(&head, find_node(head, pos), val);

    printf("List after insertion: ");
    print_list(head);
}

Output:

Enter number of elements: 5
Enter 0th element: 43
Enter 1th element: 45
Enter 2th element: 43
Enter 3th element: 2
Enter 4th element: 67
Initial List: H->67->2->43->45->43->|||
Enter a value to insert in the list: 10
Insert before: 2
List after insertion: H->67->10->2->43->45->43->|||

The post C Program Insert Element in a Singly Linked List appeared first on QnA Plus.


Viewing all articles
Browse latest Browse all 93

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>