From 8c1753a1a200cbe0c23c2178a35e1b8b8c57bf64 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev Date: Tue, 22 Nov 2022 23:57:23 +0200 Subject: Add additional --- Additional/equalize.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Additional/equalize.cpp (limited to 'Additional/equalize.cpp') diff --git a/Additional/equalize.cpp b/Additional/equalize.cpp new file mode 100644 index 0000000..263ccd2 --- /dev/null +++ b/Additional/equalize.cpp @@ -0,0 +1,60 @@ +#include +#include"../Seminar04/linked-list-utils.h" +#include + +using ListNode = LinkedListNode>; + +// O(k*n) памет, където n е дължината на списъка а k размера на най - големия стек +// O(k*n) време +void equalize(ListNode* ll) { + std::stack temp; + ListNode* iter = ll; + + while(iter) { + while(!iter->data.empty()) { + temp.push(iter->data.top()); + iter->data.pop(); + } + iter = iter->next; + } + + iter = ll; + + while(!temp.empty()) { + if(iter == nullptr) { + iter = ll; + } + iter->data.push(temp.top()); + temp.pop(); + iter = iter->next; + } +} + +void printStack(std::stack s) { + int size = s.size(); + + std::cout << "["; + + while (!s.empty()) { + std::cout << s.top() << " "; + s.pop(); + } + + std::cout << "] -> " << size << std::endl; +} + +int main() { + ListNode* ll = fromList( + { + std::stack({1, 4}), + std::stack({6, 7, 8, 9, 5}), + std::stack({10, 11, 12}), + std::stack({1, 41}), + std::stack({6, 7, 8, 9, 5, 7, 9, 0, 10, 20, 30}) + } + ); + + equalize(ll); + printLinkedList(ll, printStack); + freeList(ll); +} \ No newline at end of file -- cgit v1.3.1-23-gd82d