Skip to content

Commit 0419439

Browse files
feat: Add skip m delete n in a linked list cpp
1 parent 5d6a105 commit 0419439

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

LinkedList/SkipMDeleteN.cpp

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Skip M nodes and delete N nodes from a linked list alternately
2+
3+
#include <iostream>
4+
5+
using namespace std;
6+
7+
class Node {
8+
public:
9+
int data;
10+
Node* next;
11+
12+
Node() {
13+
this->next = NULL;
14+
}
15+
16+
Node(int data) {
17+
this->data = data;
18+
this->next = NULL;
19+
}
20+
};
21+
22+
class LinkedList {
23+
public:
24+
Node* head = NULL;
25+
26+
void insert_at_beg(int data){
27+
Node* temp = new Node(data);
28+
temp->next = this->head;
29+
this->head = temp;
30+
}
31+
32+
void print_data(){
33+
Node* itr = this->head;
34+
35+
while(itr != NULL){
36+
cout << itr->data << " ";
37+
itr = itr->next;
38+
}
39+
cout << endl;
40+
}
41+
};
42+
43+
void skip_m_delete_n(LinkedList* ll, int m, int n){
44+
Node *curr = ll->head, *del_ptr, *temp;
45+
46+
while(curr != NULL){
47+
// Skip M nodes, reach to the mth node
48+
for(int i=0; i < m-1 && curr != NULL; i++){
49+
curr = curr->next;
50+
}
51+
if(curr == NULL) return;
52+
53+
del_ptr = curr->next;
54+
55+
// Delete N nodes, reach to the node and replace pointers
56+
for(int i=0; i < n && del_ptr != NULL; i++){
57+
temp = del_ptr;
58+
del_ptr = del_ptr->next;
59+
free(temp);
60+
}
61+
62+
curr->next = del_ptr;
63+
curr = curr->next;
64+
}
65+
}
66+
67+
int main() {
68+
LinkedList* ll = new LinkedList();
69+
70+
// Create Linked list
71+
ll->insert_at_beg(8);
72+
ll->insert_at_beg(7);
73+
ll->insert_at_beg(6);
74+
ll->insert_at_beg(5);
75+
ll->insert_at_beg(4);
76+
ll->insert_at_beg(3);
77+
ll->insert_at_beg(2);
78+
ll->insert_at_beg(1);
79+
80+
cout << "Linked list before removal: " << endl;
81+
ll->print_data();
82+
int k = 3;
83+
int m = 2, n = 3;
84+
skip_m_delete_n(ll, m, n);
85+
cout << "Linked list after skip "<< m << " delete " << n << ": "<< endl;
86+
ll->print_data();
87+
return 0;
88+
}
89+
90+

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ Contains implementation of Linked List data structure and some common questions
108108
| Reverse a linked list |[py](LinkedList/ReverseSLL.py)|[cpp](LinkedList/ReverseSLL.cpp)|
109109
| Bring even valued nodes to the front |[py](LinkedList/SegregateEvenOdd.py)|[-](LinkedList/SegregateEvenOdd.cpp)|
110110
| Implementation of Singly Linked List |[py](LinkedList/SinglyLinkedList.py)|[cpp](LinkedList/SinglyLinkedList.cpp)|
111-
|Skip M nodes and then delete N nodes alternately |[py](LinkedList/SkipMDeleteN.py)|[-](LinkedList/SkipMDeleteN.cpp)|
111+
|Skip M nodes and then delete N nodes alternately |[py](LinkedList/SkipMDeleteN.py)|[cpp](LinkedList/SkipMDeleteN.cpp)|
112112

113113
------------------------------------------------------------------------------
114114
### Mathematics

0 commit comments

Comments
 (0)