Day17 删除链表的节点 + 包含min函数的栈 +从上到下

2021-06-29  本文已影响0人  吃掉夏天的怪物

Day17 的题都非常简单,只需要简略看一遍就好。注意一些细节问题。

TODO:

  1. 掌握双端队列的用法

剑指 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;
    }
};
上一篇下一篇

猜你喜欢

热点阅读