C Program to Insert a Node at Any Position in a Linked List

C Program to Insert a Node at Any Position in a Linked List

Inserting a node at any position in a linked list allows you to add elements at precise locations, not just the beginning or end. This operation is essential when maintaining order in a list or implementing advanced structures like priority queues. Understanding how to correctly insert nodes at specific positions strengthens your grasp of dynamic data structures.

Understanding the Problem

To insert a node at a specific position, the program must locate the node just before the target position. The new node’s next pointer must be set to the following node, and the previous node must point to the new node. Failing to manage these pointers correctly can break the list or cause memory errors, making careful handling critical.

Program: Insert at Any Position

This program demonstrates how to dynamically create a new node and insert it at a desired position in a linked list. It handles insertion at the beginning, middle, and end while checking for invalid positions to prevent errors.

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

typedef struct Node {
    int data;
    struct Node *next;
} Node;

Node *head = NULL;

void insertAtPosition(int value, int pos) {

    Node *newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;

    if (pos < 1) {
        printf("Invalid position\n");
        free(newNode);
        return;
    }

    if (pos == 1) {

        newNode->next = head;
        head = newNode;

        printf("%d inserted at position %d\n", value, pos);

        return;

    }

    Node *temp = head;

    for (int i = 1; i < pos - 1 && temp; i++) {
        temp = temp->next;
    }

    if (!temp) {
        printf("Position out of bounds\n");
        free(newNode);
        return;
    }

    newNode->next = temp->next;
    temp->next = newNode;

    printf("%d inserted at position %d\n", value, pos);

}

void display() {

    if (!head) {
        printf("Linked List is empty\n");
        return;
    }

    Node *temp = head;

    printf("Linked List: ");

    while (temp) {
        printf("%d ", temp->data);
        temp = temp->next;
    }

    printf("\n");

}

int main() {

    insertAtPosition(10, 1); // Insert at beginning
    insertAtPosition(20, 2); // Insert at end
    insertAtPosition(15, 2); // Insert in middle
    display();

    return 0;

}

This program ensures the new node is correctly inserted by updating pointers carefully. Edge cases such as inserting at the beginning, at the end, or in a position beyond the list length are all handled safely. The display function prints the list to verify that insertions occurred correctly.

FAQs

Q1: What is the time complexity of inserting at a specific position?
The time complexity is O(n) because it may require traversing up to n nodes to reach the desired position.

Q2: Can this handle inserting at the end of the list?
Yes, specifying a position equal to the current list length plus one appends the node to the end.

Q3: How is memory managed for the new node?
Memory is allocated dynamically using malloc and must be freed when the node is removed to avoid memory leaks.

Q4: What happens if the position is invalid?
The program prints an error message and frees the allocated memory to prevent leaks and crashes.

Conclusion

Inserting a node at any position is a versatile operation that allows precise control over a linked list’s structure. Proper pointer management and dynamic memory handling ensure that the list remains consistent and reliable. Mastering this operation lays the foundation for advanced data structures and algorithms.

References & Additional Resources

The following books and online resources provide both theoretical foundations and practical examples to help you understand linked list operations and dynamic memory allocation in C.

  1. Kernighan, B. W., & Ritchie, D. M. (1988). The C Programming Language (2nd Edition). Prentice Hall – Classic reference on C fundamentals, including pointers and memory, critical for linked list operations.
  2. Thareja, R. (2011). Data Structures Using C. Oxford University Press – Detailed coverage of linked lists and dynamic memory allocation techniques.
  3. GeeksforGeeks: Linked List Insertions – Step-by-step examples of insertion operations in linked lists.
  4. Programiz: Singly Linked List Basics – Beginner-friendly guide covering fundamental concepts and operations.
  5. Tutorialspoint: What is Dynamic Memory Allocation in C? – Explanation of malloc(), calloc(), realloc(), and free() functions for memory management in linked lists.
  6. C Standard Library Documentation – Memory Management – Official reference for memory allocation and deallocation functions in C.
Scroll to Top