思路:
设置 carry 表示是否进位
步步模拟即可
注意点:
- l1 和 l2 的值的判断并非 && 而是 ||
- carry 值最后若为 1 需要补在链表末尾
- 设置 pre 的值,最后返回 pre.next 的原因是因为最后 cur 的值已经移到最后,我们需要一个节点来表示首节点,而如果直接设置首节点需要判断是否为空,设置pre节点则不需要了
代码如下:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(-1);
ListNode cur = pre;
int carry = 0;
while(l1 != null || l2 != null){
int x = l1 == null ? 0 : l1.val;
int y = l2 == null ? 0 : l2.val;
int sum = x + y + carry;
carry = sum / 10;
sum %= 10;
cur.next = new ListNode(sum);
cur = cur.next;
l1 = l1 == null ? null : l1.next;
l2 = l2 == null ? null : l2.next;
}
if(carry == 1){
cur.next = new ListNode(carry);
}
return pre.next;
}
}