LeetCode19删除链表的倒数第N个节点&20有效的括号

19删除链表的倒数第N个节点给定一个链表 , 删除链表的倒数第n个节点 , 并且返回链表的头结点 。
示例:
给定一个链表:1->2->3->4->5,和n=2.当删除了倒数第二个节点后 , 链表变为1->2->3->5.
说明:
给定的n保证是有效的 。
进阶:
你能尝试使用一趟扫描实现吗?
分析:可以扫描两次 , 第一次获取总长度 , 知道倒数第N是正数第几个 , 第二次扫描真正的找到节点删除 。
如何扫描一次呢?用两个指针 , 一个先走N步 , 然后两个同时向下寻找 。 一直到右侧的到最尽头即可找到待删除节点 。
具体代码为:
publicListNoderemoveNthFromEnd(ListNodehead,intn){ListNodevalue=https://pcff.toutiao.jxnews.com.cn/p/20200905/newListNode(0);value.next=head;head=value;ListNodeteam=value;for(inti=0;i 有效字符串需满足:
左括号必须用相同类型的右括号闭合 。 左括号必须以正确的顺序闭合 。 注意空字符串可被认为是有效字符串 。
示例1:
输入:"()"输出:true
示例2:
输入:"()[]{}"输出:true
示例3:
输入:"(]"输出:false
示例4:
输入:"([)]"输出:false
示例5:
输入:"{[]}"输出:true
分析:括号类的问题是经典栈类问题 , 肯定要想到用栈处理 。 判断一个字符串满不满足一个有效的字符串 , 就要看它是不是都能组成对 。
从单个对来说 , ((,))都是不满足的 , 只有()才可满足 , 即一左一右 。 从多个对来说{[(字符串还可接受任意无限( , [,{的括号 。 但是只能接收)的向左的括号 。从上面可以看作一种相消除的思想 。 例如(({[()()]}))字符串遍历时候可以这样处理:
(({[(下一个)消掉成(({[(({[(下一个)消掉成(({[(({[下一个]消掉成(({(({下一个}消掉成((((下一个)消掉成((下一个)消掉成``这样就满足题意所以这个过程利用栈判断当前是加入栈还是消除顶部 , 到最后如果栈为空说明满足 , 否则不满足 , 当然具体括号要对应 , 具体实现代码为:
publicbooleanisValid(Strings){Stackstack=newStack();for(inti=0;i publicbooleanisValid(Strings){chara[]=newchar[s.length()];intindex=-1;for(inti=0;i=0&&a[index]=='[')index--;else{returnfalse;}}elseif(te=='}'){if(index>=0&&a[index]=='{')index--;else{returnfalse;}}elseif(te==')'){if(index>=0&&a[index]=='(')index--;else{returnfalse;}}elsea[++index]=te;}returnindex==-1;}


    推荐阅读