浏览代码

AK: Add insert_{before,after}(iterator, value) to SinglyLinkedList

Conrad Pankoff 5 年之前
父节点
当前提交
13cf7e76b9
共有 1 个文件被更改,包括 52 次插入0 次删除
  1. 52 0
      AK/SinglyLinkedList.h

+ 52 - 0
AK/SinglyLinkedList.h

@@ -194,6 +194,58 @@ public:
         delete iterator.m_node;
     }
 
+    void insert_before(Iterator iterator, const T& value)
+    {
+        auto* node = new Node(value);
+        node->next = iterator.m_node;
+        if (m_head == iterator.m_node)
+            m_head = node;
+        if (iterator.m_prev)
+            iterator.m_prev->next = node;
+    }
+
+    void insert_before(Iterator iterator, T&& value)
+    {
+        auto* node = new Node(move(value));
+        node->next = iterator.m_node;
+        if (m_head == iterator.m_node)
+            m_head = node;
+        if (iterator.m_prev)
+            iterator.m_prev->next = node;
+    }
+
+    void insert_after(Iterator iterator, const T& value)
+    {
+        if (iterator.is_end()) {
+            append(value);
+            return;
+        }
+
+        auto* node = new Node(value);
+        node->next = iterator.m_node->next;
+
+        iterator.m_node->next = node;
+
+        if (m_tail == iterator.m_node)
+            m_tail = node;
+    }
+
+    void insert_after(Iterator iterator, T&& value)
+    {
+        if (iterator.is_end()) {
+            append(value);
+            return;
+        }
+
+        auto* node = new Node(move(value));
+        node->next = iterator.m_node->next;
+
+        iterator.m_node->next = node;
+
+        if (m_tail == iterator.m_node)
+            m_tail = node;
+    }
+
 private:
     Node* head() { return m_head; }
     const Node* head() const { return m_head; }