408相关算法刷题【栈、队列篇】

LeetCode 20. 有效的括号

题目类型

题目链接

https://leetcode.cn/problems/valid-parentheses/

思路

方法一:

  1. 使用栈存储,遇到( { [ 压入栈
  2. 遇到) } ] 查看栈顶是否匹配
  3. 结束查看栈是否为空

方法二:

  1. 使用ascii值

AC代码1

// 方法一:
class Solution {
public:
    bool isValid(string s) {
        stack<int> stk;

        for (int i = 0; i < s.size(); i ++)
        &#123;
            if (s[i] == '(' || s[i] == '&#123;' || s[i] == '[')
            &#123;
                stk.push(s[i]);
            &#125;
            else if (s[i] == ')')
            &#123;
                if (stk.empty() || stk.top() != '(') return false;
                stk.pop();
            &#125;
            else if (s[i] == '&#125;')
            &#123;
                if(stk.empty() || stk.top() != '&#123;') return false;
                stk.pop();
            &#125;
            else if (s[i] == ']')
            &#123;
                if(stk.empty() || stk.top() != '[') return false;
                stk.pop();
            &#125;
        &#125;
        return stk.empty();
    &#125;
&#125;;

AC代码2

// 方法二:
class Solution &#123;
public:
    bool isValid(string s) &#123;
        stack<int> stk;

        for (auto c : s)
        &#123;
            if (c == '(' || c == '&#123;' || c == '[')
            &#123;
                stk.push(c);
            &#125;
            else
            &#123;
                if (!stk.empty() && abs(stk.top() - c) <= 2) stk.pop();
                else return false;
            &#125;
        &#125;
        return stk.empty();
    &#125;
&#125;;

LeetCode 61. 旋转链表

题目类型

  1. 旋转链表

题目链接

https://leetcode.cn/problems/rotate-list/submissions/

思路

不难 看代码就好了

AC代码

/**
 * Definition for singly-linked list.
 * struct ListNode &#123;
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) &#123;&#125;
 *     ListNode(int x) : val(x), next(nullptr) &#123;&#125;
 *     ListNode(int x, ListNode *next) : val(x), next(next) &#123;&#125;
 * &#125;;
 */
class Solution &#123;
public:
    ListNode* rotateRight(ListNode* head, int k) &#123;
        int n = 0;
        ListNode* tail;
        // 求长度和尾结点tail;
        for (ListNode* t = head; t; t= t->next)
        &#123;
            tail = t;
            n ++;
        &#125;
        // 处理没有必要的移动
        if (!n) return head;
        k %= n;
        if (!k) return head;

        // 找到最后k个结点的前缀结点
        ListNode* p = head;
        for (int i = 0; i < n - k - 1; i ++) p = p->next;
        tail->next = head;
        head = p->next;
        p->next = nullptr;
        return head;
    &#125;
&#125;;

##

题目类型

题目链接

思路

AC代码


##【未完待更】


 上一篇
Leetcode刷题记21-30 Leetcode刷题记21-30
LeetCode 21. 合并两个有序链表题目类型 链表 升序序列的合并问题 题目链接 https://leetcode.cn/problems/merge-two-sorted-lists/ 思路 遍历两个链表,每次选择最小的数添加到
下一篇 
408相关算法刷题【链表篇】 408相关算法刷题【链表篇】
前言LeetCode 2. 两数相加(**)题目类型 链表 题目链接 https://leetcode.cn/problems/add-two-numbers/ 思路跟加法逻辑一下 保存进位carry AC代码/** * Defini
  目录