用自定义链式栈解决力扣括号匹配问题

本文介绍了如何利用自定义链式栈解决LeetCode中的有效括号问题。通过栈的先入后出特性,匹配括号。文章详细讲解了解题思路,链式栈的结点结构,以及如何用链式栈判断括号的有效性,并进行了多种测试用例的验证。
摘要由CSDN通过智能技术生成

一、背景

在力扣题库中有一道经典的栈表应用问题有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
1、 左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
3、注意空字符串可被认为是有效字符串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses

示例1 示例 2 示例 3 示例 4 示例 5
输入: “()” 输入: “()[]{}” 输入: “(]” 输入: “([)]” 输入: “{[]}”
输出: true 输出: true 输出: false 输出: false 输出: true
二、解题思路

在这里插入图片描述

  1. 栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,遍历完所有括号后 stack仍然为空,则认为字符串中的括号都完全匹配;
  2. 如果输入的字符串中有括号外的其它字符,则直接返回无效;
  3. 如果输入了空字符串,则不会产生入栈,栈仍然为空,也可返回有效。
三、编码实现

由于输入的字符串长度不定,并考虑自定义一个链式栈(无栈满问题,空间可扩充)进行编码实现。

1、结点

每个元素,除了存储其本身的信息(数据域)之外,还需存储一个指示其直接后继存放位置的指针。这两部分信息组成数据元素的存储映像,称为结点(Node)。
在这里插入图片描述

/**
 * 结点类
 *
 * @author zhuhuix
 * @date 2020-05-29
 */
public class Node<T> {
   
    // 数据域
    private T data;
    // 指针
    private Node<T> next;

    Node(T t, Node<T> n) {
   
        this.data = t;
        this.next = n;
    }

    public T getData() {
   
        return data;
    }

    public Node<T> getNext() {
   
        return next;
    }

    public void setNext(Node<T> next) {
   
        this.next = next;
    }
}
2、链式栈
  • 链式栈是由N个结点组成的;
  • 入栈出栈都在栈顶完成;
  • 从栈顶以下的结点的指针链接下一个结点,直至栈尾。在这里插入图片描述
/**
 * 链栈的实现
 *
 * @author zhuhuix
 * @date 2020-05-29
 */
public class LinkStack<T> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧zhuhuix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值