Day17 删除链表的节点 + 包含min函数的栈 +从上到下
2021-06-29 本文已影响0人
吃掉夏天的怪物
Day17 的题都非常简单,只需要简略看一遍就好。注意一些细节问题。
TODO:
- 掌握双端队列的用法
剑指 Offer 18. 删除链表的节点(简单)
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* prev = dummy, *ne=head;
while(ne != nullptr){
if(ne->val == val){
prev->next = ne->next;
}
prev = ne;
ne = ne->next;
}
return dummy->next;
}
};
写的思路和题解差不多
剑指 Offer 30. 包含min函数的栈(简单)
如果能用双端队列就很简单。哦不对,用栈也对啊 ! 下面代码将deque<int> deq;
改为stack<int> minStk
也可以。
class MinStack {
public:
/** initialize your data structure here. */
deque<int> deq;
stack<int> stk;
MinStack() {
}
void push(int x) {
if(deq.empty() || deq.back() >= x){
deq.push_back(x);
}
stk.push(x);
}
void pop() {
int wait_delete = stk.top();
stk.pop();
if(deq.back() == wait_delete){
deq.pop_back();
}
}
int top() {
return stk.top();
}
int min() {
return deq.back();
}
};
剑指 Offer 32 - II. 从上到下打印二叉树 II(简单)
似乎就是一个简单的层序遍历,没有什么难的。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(root == nullptr) return {};
TreeNode* ptr = root;
queue<TreeNode*> quenode;
quenode.push(root);
vector<vector<int>> res;
while(!quenode.empty()){
int cnt = quenode.size();
vector<int> levelRes;
for(int i = 0; i < cnt; i++ ){
TreeNode* tempNode = quenode.front();
quenode.pop();
levelRes.push_back(tempNode->val);
if(tempNode->left) quenode.push(tempNode->left);
if(tempNode->right) quenode.push(tempNode->right);
}
res.push_back(levelRes);
}
return res;
}
};