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

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 = 2Linked List:1->2->3->4->5->6->7->8Output:Linked List:1->2->5->6Input:M = 3, N = 2Linked List:1->2->3->4->5->6->7->8->9->10Output:Linked List:1->2->3->6->7->8Input:M = 1, N = 1Linked List:1->2->3->4->5->6->7->8->9->10Output:Linked List:1->3->5->7->9

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 <bits/stdc++.h>` `using` `namespace` `std;` `// A linked list node` `class` `Node` `{` ` ` `public` `:` ` ` `int` `data;` ` ` `Node *next;` `};` `/* Function to insert a node` ` ` `at the beginning */` `void` `push(Node ** head_ref,` ` ` `int` `new_data)` `{` ` ` `// Allocate node` ` ` `Node* new_node = ` `new` `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(Node *head)` `{` ` ` `Node *temp = head;` ` ` `while` `(temp != NULL)` ` ` `{` ` ` `cout<<temp->data<<` `" "` `;` ` ` `temp = temp->next;` ` ` `}` ` ` `cout<<endl;` `}` `// Function to skip M nodes and then` `// delete N nodes of the linked list.` `void` `skipMdeleteN(Node *head,` ` ` `int` `M, ` `int` `N)` `{` ` ` `Node *curr = head, *t;` ` ` `int` `count;` ` ` `// The main loop that traverses` ` ` `// through the whole list` ` ` `while` `(curr)` ` ` `{` ` ` `// Skip M nodes` ` ` `for` `(count = 1; count < M &&` ` ` `curr!= NULL; count++)` ` ` `curr = curr->next;` ` ` `// 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++)` ` ` `{` ` ` `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 */` ` ` `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);` ` ` `cout << ` `"M = "` `<< M<< ` `" N = "` `<<` ` ` `N << ` `"Given Linked list is :"` `;` ` ` `printList(head);` ` ` `skipMdeleteN(head, M, N);` ` ` `cout<<` `"Linked list after deletion is :"` `;` ` ` `printList(head);` ` ` `return` `0;` `}` `// This code is contributed by rathbhupendra` |

**Output: **

M = 2, N = 3 Given Linked list is : 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!