From 98f6872efa0cd02e892ed5d7b836c6929d5c0e10 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev Date: Fri, 15 Nov 2024 14:38:47 -0500 Subject: Add additional tasks --- .../solutions/remove-nodes-recursion.cpp | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Additional/Additional-2024-IS/solutions/remove-nodes-recursion.cpp (limited to 'Additional/Additional-2024-IS/solutions/remove-nodes-recursion.cpp') diff --git a/Additional/Additional-2024-IS/solutions/remove-nodes-recursion.cpp b/Additional/Additional-2024-IS/solutions/remove-nodes-recursion.cpp new file mode 100644 index 0000000..bff2191 --- /dev/null +++ b/Additional/Additional-2024-IS/solutions/remove-nodes-recursion.cpp @@ -0,0 +1,75 @@ +#include +#include + +struct ListNode +{ + int val; + ListNode* next; + ListNode(int x, ListNode* next = nullptr) + : val(x) + , next(next) + {} +}; + +class Solution +{ + public: + ListNode* removeNodes(ListNode* head) + { + int maxVal = INT_MIN; + return removeNodesRecursive(head, maxVal); + } + + private: + ListNode* removeNodesRecursive(ListNode* node, int& maxVal) + { + if (node == nullptr) + { + return nullptr; + } + + ListNode* filteredNext = removeNodesRecursive(node->next, maxVal); + + if (node->val >= maxVal) + { + maxVal = node->val; + node->next = filteredNext; + return node; + } + else + { + delete node; + return filteredNext; + } + } +}; + +void printList(ListNode* node) +{ + while (node) + { + std::cout << node->val << " "; + node = node->next; + } + std::cout << std::endl; +} + +int main() +{ + Solution s; + + ListNode* result = + s.removeNodes(new ListNode(5, new ListNode(2, new ListNode(13, new ListNode(3, new ListNode(8)))))); + + printList(result); + + ListNode* current = result; + while (current) + { + ListNode* temp = current; + current = current->next; + delete temp; + } + + return 0; +} -- cgit v1.3.1-23-gd82d