Table of Contents
In the given linked list delete N nodes after M nodes, do this till the end of the linked list.
Example
Algorithm
a. Traverse through the list.
b. Skip M nodes, if we reach the end of list then return.
c. Else, delete next N nodes and link the list with remaining nodes.
d. Continue next iteration by moving the pointer.
C++ Program
#include <bits/stdc++.h> using namespace std; struct LLNode { int data; struct LLNode* next; }; /* Function to insertAtBeginning a node */ void insertAtBeginning(struct LLNode** head, int dataToBeInserted) { struct LLNode* curr = new LLNode; curr->data = dataToBeInserted; curr->next = NULL; if(*head == NULL) *head=curr; //if this is first node make this as head of list else { curr->next=*head; //else make the curr (new) node's next point to head and make this new node a the head *head=curr; } //O(1) constant time } //display linked list void display(struct LLNode**node) { struct LLNode *temp= *node; while(temp!=NULL) { if(temp->next!=NULL) cout<<temp->data<<" ->"; else cout<<temp->data; temp=temp->next; //move to next node } //O(number of nodes) cout<<endl; } void DeleteNAfterM(struct LLNode *head, int M, int N) { struct LLNode *curr = head, *rem; int count; //Move M nodes and delete N nodes while(curr) { for (count = 1; count<M && curr!= NULL; count++) { curr = curr->next; } if (curr == NULL) { return; } rem = curr->next; for(count = 1; count<=N && rem!= NULL; count++) { struct LLNode *temp = rem; rem = rem->next; free(temp); } //link to remaining nodes //continue iteration for the remaining nodes curr->next = rem; curr = rem; } } //Main function int main() { struct LLNode* head = NULL; int M=2, N=2; insertAtBeginning(&head, 8); insertAtBeginning(&head, 7); insertAtBeginning(&head, 6); insertAtBeginning(&head, 5); insertAtBeginning(&head, 4); insertAtBeginning(&head, 3); insertAtBeginning(&head, 2); insertAtBeginning(&head, 1); cout<<"Given M = "<<M<<", "<<"N = "<<N<<endl; cout<<"Input linked list: "; display(&head); DeleteNAfterM(head, M, N); cout<<"Output linked list: "; display(&head); return 0; }