题目:
思路:
1.先将输入的括号进行遍历,然后进行判断将左边类型的括号的存入栈中
2.将右边类型的括号用方法进行替换成相同类型的左边括号,然后进行对比
3.因为栈是先进后出,所以使用在使用最近的右边括号转化后使用peek方法返回栈 顶进行对比,对比完成后弹出栈顶元素,循环下次
4.栈 的isEmpty返回 为真。
class Solution {
public boolean isValid(String s) {
Stack<Character> left = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[')
left.push(c);
else
if (!left.isEmpty() && leftOf(c) == left.peek())
left.pop();
else
return false;
}
return left.isEmpty();
}
char leftOf(char c) {
if (c == '}') return '{';
if (c == ')') return '(';
return '[';
}
}
题目:
合并两个有序链表
思路:
1.先定义头节点以及哨兵节点,当头节点的当前list1的值小于list2的时候,将头节点向后移一位;
list2也相同操作。
2.使用哨兵节点返回合并的链表
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode dummy=new ListNode(0);
ListNode p= dummy;
while (list1!=null&&list2!=null){
if(list1.val>list2.val){
p.next=list2;
list2=list2.next;
}else{
p.next=list1;
list1=list1.next;
}
p=p.next;
}
if(list1!=null){
p.next=list1;
}
if(list2!=null){
p.next=list2;
}
return dummy.next;
}
}