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
| 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; }
|
递归解法
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; }
|
迭代解法
待学习
给你两个单链表的头节点 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,长度就相等了,然后等步遍历判断是否相等就行了
原始的数据

修改后的数据示意图

!(
)
迭代法需要再写下