Skip to content

Commit 13cf7e7

Browse files
deoxxaawesomekling
authored andcommitted
AK: Add insert_{before,after}(iterator, value) to SinglyLinkedList
1 parent abdd5aa commit 13cf7e7

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

AK/SinglyLinkedList.h

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,58 @@ class SinglyLinkedList {
194194
delete iterator.m_node;
195195
}
196196

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+
197249
private:
198250
Node* head() { return m_head; }
199251
const Node* head() const { return m_head; }

0 commit comments

Comments
 (0)