 GeeksforGeeks App
Open App Browser
Continue

# 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 = 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 ``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<data<<``" "``;``        ``temp = temp->next;``    ``}``    ``cout<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