# C Program To Delete N Nodes After M Nodes Of A Linked List

• Last Updated : 30 Mar, 2022

Given a linked list and two integers M and N. Traverse the linked list such that you retain M nodes then delete next N nodes, continue the same till end of the linked list.
Difficulty Level: Rookie
Examples:

```Input:
M = 2, N = 2
Output:

Input:
M = 3, N = 2
Output:

Input:
M = 1, N = 1
Output:

The main part of the problem is to maintain proper links between nodes, make sure that all corner cases are handled. Following is C implementation of function skipMdeleteN() that skips M nodes and delete N nodes till end of list. It is assumed that M cannot be 0.

## C

 `// C program to delete N nodes after``// M nodes of a linked list``#include ``#include ` `// A linked list node``struct` `Node``{``    ``int` `data;``    ``struct` `Node *next;``};` `/* Function to insert a node at``   ``the beginning */``void` `push(``struct` `Node ** head_ref,``          ``int` `new_data)``{``    ``// Allocate node``    ``struct` `Node* new_node =``           ``(``struct` `Node*) ``malloc``(``sizeof``(``struct` `Node));` `    ``// Put in the data ``    ``new_node->data = new_data;` `    ``// Link the old list off the``    ``// new node``    ``new_node->next = (*head_ref);` `    ``// Move the head to point to the``    ``// new node``    ``(*head_ref) = new_node;``}` `// Function to print linked list``void` `printList(``struct` `Node *head)``{``    ``struct` `Node *temp = head;``    ``while` `(temp != NULL)``    ``{``        ``printf``(``"%d "``, temp->data);``        ``temp = temp->next;``    ``}``    ``printf``(``""``);``}` `// Function to skip M nodes and then``// delete N nodes of the linked list.``void` `skipMdeleteN(``struct` `Node  *head,``                  ``int` `M, ``int` `N)``{``    ``struct` `Node *curr = head, *t;``    ``int` `count;` `    ``// The main loop that traverses``    ``// through the whole list``    ``while` `(curr)``    ``{``        ``// Skip M nodes``        ``for` `(count = 1; countnext;` `        ``// If we reached end of list,``        ``// then return``        ``if` `(curr == NULL)``            ``return``;` `        ``// Start from next node and``        ``// delete N nodes``        ``t = curr->next;``        ``for` `(count = 1; count<=N &&``             ``t!= NULL; count++)``        ``{``            ``struct` `Node *temp = t;``            ``t = t->next;``            ``free``(temp);``        ``}` `        ``// Link the previous list with``        ``// remaining nodes``        ``curr->next = t;` `        ``// Set current pointer for next``        ``// iteration``        ``curr = t;``    ``}``}` `// Driver code``int` `main()``{``    ``/* Create following linked list``       ``1->2->3->4->5->6->7->8->9->10 */``    ``struct` `Node* head = NULL;``    ``int` `M=2, N=3;``    ``push(&head, 10);``    ``push(&head, 9);``    ``push(&head, 8);``    ``push(&head, 7);``    ``push(&head, 6);``    ``push(&head, 5);``    ``push(&head, 4);``    ``push(&head, 3);``    ``push(&head, 2);``    ``push(&head, 1);` `    ``printf``("M = %d, N = %d``            ``Given Linked list is :",``            ``M, N);``    ``printList(head);` `    ``skipMdeleteN(head, M, N);` `    ``printf``(``    ``"Linked list after deletion is :"``);``    ``printList(head);` `    ``return` `0;``}`

Output:

```M = 2, N = 3
1 2 3 4 5 6 7 8 9 10
Linked list after deletion is :
1 2 6 7```

Time Complexity:
O(n) where n is number of nodes in linked list.

Auxiliary Space: O(1)

Please refer complete article on Delete N nodes after M nodes of a linked list for more details!

My Personal Notes arrow_drop_up