当前位置: 代码迷 >> 综合 >> LeetCode 刷题记录(19、20)—Java语言
  详细解决方案

LeetCode 刷题记录(19、20)—Java语言

热度:46   发布时间:2023-09-18 10:33:21.0

19. 删除链表的倒数第N个节点

题目

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

思路

定义两个指针,第一个指针进行遍历,第二个指针为第一个指针的前n个节点。这样就能做到一次遍历即可删除指定的倒数第n个节点

代码

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {if(head==null||head.next==null&&n==1)return null;ListNode node = head;ListNode delete = null;while(node!=null){if(n>0)n--;else if(delete==null)delete = head;elsedelete = delete.next;node = node.next;}if(delete!=null)delete.next = delete.next.next;else if(n==0)head = head.next;return head;}
}

20. 有效的括号

题目

给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:

输入: “()”
输出: true
示例 2:

输入: “()[]{}”
输出: true
示例 3:

输入: “(]”
输出: false
示例 4:

输入: “([)]”
输出: false
示例 5:

输入: “{[]}”
输出: true

思路

首先这道题目的要求是配对的顺序和类型要是对的,即当前遍历到的右括号必须要与最近的左括号类型相同。并且需要左括号和右括号的每个类型的数量要一样,看到这个样的特性,可以想到用Stack的特性来解决这个问题,左边的括号就直接压入Stack中,右边的括号就要和Stack中的第一个就行匹配如果可以配对就出栈。同时还得注意数量也要相对应。最后如果Stack是空的即验证成功

代码

class Solution {public boolean isValid(String s) {Stack<Integer> stack = new Stack<>();char in[] = s.toCharArray();for(char c : in){if(c=='(')stack.push(0);else if(c=='[')stack.push(1);else if(c=='{')stack.push(2);else if(stack.isEmpty())return false;else if(c==')'&&stack.pop()!=0)return false;else if(c==']'&&stack.pop()!=1)return false;else if(c=='}'&&stack.pop()!=2)return false;}return stack.isEmpty();}
}
  相关解决方案