2. 两数相加
链表模拟
模拟O(n)
因为给的链表就是逆序的,输出也是逆序的,而且在进位的时候需要关注,所以直接从链表头遍历。
需要关注进位的问题,在遍历结束之后如果进位还存在,那么需要把进位放在最后一位。
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode res = new ListNode();
ListNode p = res;
boolean more = false;
while(l1 != null || l2 != null) {
int tmp = more ? 1 : 0;
if(l1 != null) {
tmp += l1.val;
l1 = l1.next;
}
if(l2 != null) {
tmp += l2.val;
l2 = l2.next;
}
if(tmp > 9) {
tmp -= 10;
more = true;
} else {
more = false;
}
res.next = new ListNode(tmp);
res = res.next;
}
if(more) {
res.next = new ListNode(1);
}
return p.next;
}
}