diff --git a/AK/DoublyLinkedList.h b/AK/DoublyLinkedList.h index 6fcc869483..9990b9ce77 100644 --- a/AK/DoublyLinkedList.h +++ b/AK/DoublyLinkedList.h @@ -74,7 +74,7 @@ private: }; public: - DoublyLinkedList() {} + DoublyLinkedList() { } ~DoublyLinkedList() { clear(); } bool is_empty() const { return !head(); } @@ -133,11 +133,7 @@ public: bool contains_slow(const T& value) const { - for (auto* node = m_head; node; node = node->next) { - if (node->value == value) - return true; - } - return false; + return find_node(value) != nullptr; } using Iterator = DoublyLinkedListIterator; @@ -152,19 +148,17 @@ public: ConstIterator find(const T& value) const { - for (auto* node = m_head; node; node = node->next) { - if (Traits::equals(node->value, value)) - return ConstIterator(node); - } + Node* node = find_node(value); + if (node) + return ConstIterator(node); return end(); } Iterator find(const T& value) { - for (auto* node = m_head; node; node = node->next) { - if (Traits::equals(node->value, value)) - return Iterator(node); - } + Node* node = find_node(value); + if (node) + return Iterator(node); return end(); } @@ -220,6 +214,15 @@ private: m_head = node; } + Node* find_node(const T& value) const + { + for (auto* node = m_head; node; node = node->next) { + if (Traits::equals(node->value, value)) + return node; + } + return nullptr; + } + Node* head() { return m_head; } const Node* head() const { return m_head; }