@@ -194,6 +194,58 @@ class SinglyLinkedList {
194
194
delete iterator.m_node ;
195
195
}
196
196
197
+ void insert_before (Iterator iterator, const T& value)
198
+ {
199
+ auto * node = new Node (value);
200
+ node->next = iterator.m_node ;
201
+ if (m_head == iterator.m_node )
202
+ m_head = node;
203
+ if (iterator.m_prev )
204
+ iterator.m_prev ->next = node;
205
+ }
206
+
207
+ void insert_before (Iterator iterator, T&& value)
208
+ {
209
+ auto * node = new Node (move (value));
210
+ node->next = iterator.m_node ;
211
+ if (m_head == iterator.m_node )
212
+ m_head = node;
213
+ if (iterator.m_prev )
214
+ iterator.m_prev ->next = node;
215
+ }
216
+
217
+ void insert_after (Iterator iterator, const T& value)
218
+ {
219
+ if (iterator.is_end ()) {
220
+ append (value);
221
+ return ;
222
+ }
223
+
224
+ auto * node = new Node (value);
225
+ node->next = iterator.m_node ->next ;
226
+
227
+ iterator.m_node ->next = node;
228
+
229
+ if (m_tail == iterator.m_node )
230
+ m_tail = node;
231
+ }
232
+
233
+ void insert_after (Iterator iterator, T&& value)
234
+ {
235
+ if (iterator.is_end ()) {
236
+ append (value);
237
+ return ;
238
+ }
239
+
240
+ auto * node = new Node (move (value));
241
+ node->next = iterator.m_node ->next ;
242
+
243
+ iterator.m_node ->next = node;
244
+
245
+ if (m_tail == iterator.m_node )
246
+ m_tail = node;
247
+ }
248
+
197
249
private:
198
250
Node* head () { return m_head; }
199
251
const Node* head () const { return m_head; }
0 commit comments