2. 两数相加
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
注意的点:就是如果链表都遍历完了,还有进位,就要单独创建一个节点保存进位。
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(-1);
ListNode cur = dummyHead;
int carry = 0;
while(l1 != null || l2 != null) {
// 复用这块逻辑,判断null与非null的情况
int num1 = l1 != null ? l1.val : 0;
int num2 = l2 != null ? l2.val : 0;
// 当前的和记住需要加上后一位的进位。
int sum = num1+num2+carry;
cur.next = new ListNode(sum%10);
cur = cur.next;
carry = sum/10;
// 最后向后移动的时候,注意null的情况
l1 = l1 != null ? l1.next : null;
l2 = l2 != null ? l2.next : null;
}
// 遍历完节点后,如果还有进位信息,还需要新创建一个节点;
// 123,888这样的数相加,就是多出来的进位。
if(carry != 0) {
cur.next = new ListNode(1);
}
return dummyHead.next;
}