# Python 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.

## Python

`# Python program to delete M nodes ` `# after N nodes` `# Node class ` `class` `Node:` ` ` ` ` `# Constructor to initialize ` ` ` `# the node object` ` ` `def` `__init__(` `self` `, data):` ` ` `self` `.data ` `=` `data` ` ` `self` `.` `next` `=` `None` ` ` `class` `LinkedList:` ` ` ` ` `# Function to initialize head` ` ` `def` `__init__(` `self` `):` ` ` `self` `.head ` `=` `None` ` ` ` ` `# Function to insert a new node ` ` ` `# at the beginning` ` ` `def` `push(` `self` `, new_data):` ` ` `new_node ` `=` `Node(new_data)` ` ` `new_node.` `next` `=` `self` `.head` ` ` `self` `.head ` `=` `new_node` ` ` ` ` `# Utility function to print the ` ` ` `# linked LinkedList` ` ` `def` `printList(` `self` `):` ` ` `temp ` `=` `self` `.head` ` ` `while` `(temp):` ` ` `print` `temp.data,` ` ` `temp ` `=` `temp.` `next` ` ` ` ` `def` `skipMdeleteN(` `self` `, M, N):` ` ` `curr ` `=` `self` `.head` ` ` ` ` `# The main loop that traverses ` ` ` `# through the whole list` ` ` `while` `(curr):` ` ` `# Skip M nodes` ` ` `for` `count ` `in` `range` `(` `1` `, M):` ` ` `if` `curr ` `is` `None` `:` ` ` `return` ` ` `curr ` `=` `curr.` `next` ` ` ` ` `if` `curr ` `is` `None` `:` ` ` `return` ` ` ` ` `# Start from next node and delete ` ` ` `# N nodes` ` ` `t ` `=` `curr.` `next` ` ` `for` `count ` `in` `range` `(` `1` `, N` `+` `1` `):` ` ` `if` `t ` `is` `None` `:` ` ` `break` ` ` `t ` `=` `t.` `next` ` ` ` ` `# Link the previous list with ` ` ` `# remaining nodes` ` ` `curr.` `next` `=` `t` ` ` ` ` `# Set Current pointer for next ` ` ` `# iteration` ` ` `curr ` `=` `t ` ` ` `# Driver code` ` ` `# Create following linked list` `# 1->2->3->4->5->6->7->8->9->10` `llist ` `=` `LinkedList()` `M ` `=` `2` `N ` `=` `3` `llist.push(` `10` `)` `llist.push(` `9` `)` `llist.push(` `8` `)` `llist.push(` `7` `)` `llist.push(` `6` `)` `llist.push(` `5` `)` `llist.push(` `4` `)` `llist.push(` `3` `)` `llist.push(` `2` `)` `llist.push(` `1` `)` ` ` `print` `"M ` `=` `%` `d, N ` `=` `%` `d` `Given Linked ` `List` `is` `:" ` `%` `(M, N)` `llist.printList()` `print` ` ` `llist.skipMdeleteN(M, N)` ` ` `print` `"Linked list after deletion is"` `llist.printList()` `# This code is contributed by Nikhil Kumar Singh(nickzuck_007)` |

**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!