Skip to content

# C Program For Deleting A Linked List Node At A Given Position

• Last Updated : 16 Jun, 2022

Given a singly linked list and a position, delete a linked list node at the given position.

Example:

```Input: position = 1, Linked List = 8->2->3->1->7
Output: Linked List =  8->3->1->7

Input: position = 0, Linked List = 8->2->3->1->7
Output: Linked List = 2->3->1->7```

If the node to be deleted is the root, simply delete it. To delete a middle node, we must have a pointer to the node previous to the node to be deleted. So if positions are not zero, we run a loop position-1 times and get a pointer to the previous node.

Below is the implementation of the above idea.

## C

 `// A complete working C program to delete a node in a linked list` `// at a given position` `#include ` `#include `   `// A linked list node` `struct` `Node` `{` `    ``int` `data;` `    ``struct` `Node *next;` `};`   `/* Given a reference (pointer to pointer) to the head of a list` `   ``and an int inserts a new node on the front of the list. */` `void` `push(``struct` `Node** head_ref, ``int` `new_data)` `{` `    ``struct` `Node* new_node = (``struct` `Node*) ``malloc``(``sizeof``(``struct` `Node));` `    ``new_node->data  = new_data;` `    ``new_node->next = (*head_ref);` `    ``(*head_ref)    = new_node;` `}`   `/* Given a reference (pointer to pointer) to the head of a list` `   ``and a position, deletes the node at the given position */` `void` `deleteNode(``struct` `Node **head_ref, ``int` `position)` `{` `   ``// If linked list is empty` `   ``if` `(*head_ref == NULL)` `      ``return``;`   `   ``// Store head node` `   ``struct` `Node* temp = *head_ref;`   `    ``// If head needs to be removed` `    ``if` `(position == 0)` `    ``{` `        ``*head_ref = temp->next;   ``// Change head` `        ``free``(temp);               ``// free old head` `        ``return``;` `    ``}`   `    ``// Find previous node of the node to be deleted` `    ``for` `(``int` `i=0; temp!=NULL && inext;`   `    ``// If position is more than number of nodes` `    ``if` `(temp == NULL || temp->next == NULL)` `         ``return``;`   `    ``// Node temp->next is the node to be deleted` `    ``// Store pointer to the next of node to be deleted` `    ``struct` `Node *next = temp->next->next;`   `    ``// Unlink the node from linked list` `    ``free``(temp->next);  ``// Free memory`   `    ``temp->next = next;  ``// Unlink the deleted node from list` `}`   `// This function prints contents of linked list starting from` `// the given node` `void` `printList(``struct` `Node *node)` `{` `    ``while` `(node != NULL)` `    ``{` `        ``printf``(``" %d "``, node->data);` `        ``node = node->next;` `    ``}` `}`   `/* Driver program to test above functions*/` `int` `main()` `{` `    ``/* Start with the empty list */` `    ``struct` `Node* head = NULL;`   `    ``push(&head, 7);` `    ``push(&head, 1);` `    ``push(&head, 3);` `    ``push(&head, 2);` `    ``push(&head, 8);`   `    ``puts``(``"Created Linked List: "``);` `    ``printList(head);` `    ``deleteNode(&head, 4);` `    ``puts``("` `Linked List after Deletion at position 4: ");` `    ``printList(head);` `    ``return` `0;` `}`

Output:

```Created Linked List:
8  2  3  1  7
Linked List after Deletion at position 4:
8  2  3  1 ```

Time Complexity: O(n), where n represents the length of the given linked list.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

Please refer complete article on Delete a Linked List node at a given position for more details!

My Personal Notes arrow_drop_up
Recommended Articles
Page :