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-stack.cpp | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Additional/Additional-2024-IS/solutions/remove-nodes-stack.cpp (limited to 'Additional/Additional-2024-IS/solutions/remove-nodes-stack.cpp') diff --git a/Additional/Additional-2024-IS/solutions/remove-nodes-stack.cpp b/Additional/Additional-2024-IS/solutions/remove-nodes-stack.cpp new file mode 100644 index 0000000..a43dcfc --- /dev/null +++ b/Additional/Additional-2024-IS/solutions/remove-nodes-stack.cpp @@ -0,0 +1,89 @@ +#include +#include +#include + +struct ListNode +{ + int val; + ListNode* next; + ListNode() + : val(0) + , next(nullptr) + {} + ListNode(int x) + : val(x) + , next(nullptr) + {} + ListNode(int x, ListNode* next) + : val(x) + , next(next) + {} +}; + +class Solution +{ + public: + ListNode* removeNodes(ListNode* node) + { + if (!node || !node->next) + return node; + + std::stack listNodes; + int maxValue = INT_MIN; + + ListNode* iter = nullptr; + + while (node) + { + listNodes.push(node); + node = node->next; + } + + while (!listNodes.empty()) + { + ListNode* currentNode = listNodes.top(); + listNodes.pop(); + + if (currentNode->val >= maxValue) + { + maxValue = currentNode->val; + currentNode->next = iter; + iter = currentNode; + } + else + { + delete currentNode; + } + } + + return iter; + } +}; + +void freeList(ListNode* node) +{ + while (node) + { + ListNode* temp = node; + node = node->next; + delete temp; + } +} + +int main() +{ + Solution s; + + ListNode* result = + s.removeNodes(new ListNode(5, new ListNode(2, new ListNode(13, new ListNode(3, new ListNode(8)))))); + + ListNode* toDelete = result; + + while (result) + { + std::cout << result->val << " "; + result = result->next; + } + + freeList(toDelete); +} -- cgit v1.3.1-23-gd82d