leetcode/include/jianzhi_offer.h
2023-05-24 21:09:40 +08:00

113 lines
2.3 KiB
C++

#pragma once
#include <iostream>
#include <string>
#include <stack>
namespace yaha {
class CQueue {
public:
void append_tail(int value);
int delete_head();
private:
std::stack<int> _stk_tail;
std::stack<int> _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<int> reverse_print(ListNode *head);
void reverse_stack(ListNode *head, std::vector<int> &res);
void reverse(ListNode *head, std::vector<int> &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<int> _stk;
std::stack<int> _min_stk;
void reverse_stack(ListNode *head, std::vector<int> &res);
void reverse(ListNode *head, std::vector<int> &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);
};
}