#pragma once #include #include #include namespace yaha { class CQueue { public: void append_tail(int value); int delete_head(); private: std::stack _stk_tail; std::stack _stk_head; }; class String { public: /** * 剑指 Offer 09. 用两个栈实现队列 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/5d3i87/ * @param s * @return */ std::string replace_space(std::string s); /** * 剑指 Offer 20. 表示数值的字符串 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/5d6vi6/ * @param s * @return */ bool is_number(std::string s); std::string reverse_left_words(std::string s, int n); }; class ListNode { public: int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} /** * 剑指 Offer 06. 从尾到头打印链表 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/5dt66m/ * @param head * @return */ std::vector reverse_print(ListNode *head); void reverse_stack(ListNode *head, std::vector &res); void reverse(ListNode *head, std::vector &res); }; class Node { public: int val; Node *next; Node *random; Node(int _val) { val = _val; next = NULL; random = NULL; } /** * 剑指 Offer 35. 复杂链表的复制 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/9p0yy1/ * @param head * @return */ Node* copy_random_list(Node* head); }; /** * 剑指 Offer 30. 包含 min 函数的栈 * * @url: https://leetcode.cn/leetbook/read/illustration-of-algorithm/50bp33/ */ class MinStack { public: MinStack() = default; void push(int x); void pop(); int top(); int min(); private: std::stack _stk; std::stack _min_stk; void reverse_stack(ListNode *head, std::vector &res); void reverse(ListNode *head, std::vector &res); /** * 剑指 Offer 24. 反转链表 * * @url https://leetcode.cn/leetbook/read/illustration-of-algorithm/9pdjbm/ * @param head * @return */ ListNode *reverse_list(ListNode *head); ListNode* reverse_list(ListNode* cur, ListNode* pre); }; }