剑指 Offer 09. 用两个栈实现队列
class CQueue
{
public:
stack<int> st1;
stack<int> st2;
CQueue()
{
while (!st1.empty())
{
st1.pop();
}
while (!st2.empty())
{
st2.pop();
}
}
void appendTail(int value)
{
st1.push(value);
}
int deleteHead()
{
if (st1.empty())
{
return -1;
}
while (!st1.empty())
{
st2.push(st1.top());
st1.pop();
}
int res = st2.top();
st2.pop();
while (!st2.empty())
{
st1.push(st2.top());
st2.pop();
}
return res;
}
};
剑指 Offer 30. 包含min函数的栈
class MinStack {
public:
stack<int> st;
stack<int> min_st;
public:
MinStack()
{
min_st.push(INT_MAX);
}
void push(int x)
{
st.push(x);
min_st.push(std::min(x, min_st.top()));
}
void pop()
{
st.pop();
min_st.pop();
}
int top()
{
return st.top();
}
int min()
{
return min_st.top();
}
};
剑指 Offer 06. 从尾到头打印链表
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
ListNode* node = head;
vector<int> res;
while (node)
{
res.emplace_back(node->val);
node = node->next;
}
reverse(res.begin(), res.end());
return res;
}
};
剑指 Offer 24. 反转链表
1、使用队列
class Solution
{
public:
ListNode* reverseList(ListNode* head)
{
queue<int> que;
ListNode* node = head;
while (node != nullptr)
{
que.push(node->val);
node = node->next;
}
ListNode* head2 = nullptr;
while (!que.empty())
{
ListNode* temp = new ListNode(que.front());
que.pop();
temp->next = head2;
head2 = temp;
}
return head2;
}
};
2、双指针
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* pre = nullptr;
ListNode* node = head;
while (node)
{
ListNode* temp = node->next;
node->next = pre;
pre = node;
node = temp;
}
return pre;
}
};