leetcode

20. 有效的括号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//官方 HashMap 解法更好 更清晰
public boolean isValid(String s) {
Stack stack = new Stack();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if ((c == '(') || c == '[' || c == '{') {
stack.push(c);
} else {
if (stack.isEmpty()) {
return false;
}
boolean p1 = (c == ')' && (char) stack.peek() == '(');

boolean p2 = (c == ']' && (char) stack.peek() == '[');
boolean p3 = (c == '}' && (char) stack.peek() == '{');
if (p1 || p2 || p3) {
stack.pop();
}else {
stack.push(c);
}
}
}
if (stack.isEmpty()) {
return true;
}
return false;
}

21. 合并两个有序链表

递归解法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode prevHead = new ListNode(-1);
ListNode prev = prevHead;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
prev.next = l1;
l1 = l1.next;
} else {
prev.next = l2;
l2 = l2.next;
}
prev = prev.next;
}

if (l1 == null) {
prev.next = l2;
}
if (l2 == null) {
prev.next = l1;
}
return prevHead.next;
}
迭代解法

待学习

160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

1
2
3
4
5
6
7
8
9
10
11
12
public class Solution_160 {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode la = headA;
ListNode lb = headB;

while(la!=lb){
la = (la==null) ? headB : la.next;
lb = (lb==null) ? headA : lb.next ;
}
return la;
}
}

先走自己的路,再走对方的路,最终路程一样

可以这么理解,a,b两个链表,变更为 a+b 和 b+a,长度就相等了,然后等步遍历判断是否相等就行了

原始的数据

修改后的数据示意图

1.png

!(相交链表.png)

101. 对称二叉树

迭代法需要再写下


leetcode
https://noteforme.github.io/2022/07/26/Leetcode/
Author
Jon
Posted on
July 26, 2022
Licensed under