class Solution {
public int trap(int[] height) {
int size = height.length;
int[] left = new int[size];
int[] right = new int[size];
for (int i = 1;i < size;i++){
left[i] = Math.max(left[i - 1],height[i - 1]);
}
for (int i = size - 2;i >= 0;i--){
right[i] = Math.max(right[i + 1],height[i + 1]);
}
int res = 0;
for (int i = 1;i < size;i++){
int min = Math.min(left[i],right[i]);
if (min > height[i]){
res += min - height[i];
}
}
return res;
}
}
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode p1 = reverseListNode(l1);
ListNode p2 = reverseListNode(l2);
int c = 0;
ListNode dummy = new ListNode(0);
ListNode p = dummy;
while (p1 != null || p2 != null){
int x = (p1 == null ? 0 : p1.val);
int y = (p2 == null ? 0 : p2.val);
int num = (x + y + c) %10;
c = (x + y + c) /10;
p.next = new ListNode(num);
p = p.next;
if (p1 != null){
p1 = p1.next;
}
if (p2 != null){
p2 = p2.next;
}
}
if (c > 0){
p.next = new ListNode(c);
}
return reverseListNode(dummy.next);
}
public ListNode reverseListNode(ListNode head){
if (head == null || head.next == null){
return head;
}
ListNode pre = null;
ListNode curr = head;
while (curr != null){
ListNode temp = curr.next;
curr.next = pre;
pre = curr;
curr = temp;
}
return pre;
}
}