左神算法笔记-两个链表相加

50 阅读1分钟
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    // ans 代表返回的链表头节点,cur 代表当前节点位置
    ListNode ans = null, cur = null;
    // 进位,0代表无进位,1代表有进位
    int carry = 0;

    for (int sum, val;      // 声明两个变量,sum:相加的和,val:链表的实际值
         l1 != null || l2 != null;  // 结束条件
         l1 = l1 != null ? l1.next : null, // l1 的跳转
                 l2 = l2 != null ? l2.next : null // l2 的跳转
    ) {

        sum = (l1 != null ? l1.val : 0)
                + (l2 != null ? l2.val : 0)
                + carry;

        val = sum % 10;
        carry = sum / 10;
        if (ans == null) {
            ans = new ListNode(val);
            cur = ans;
        } else {
            cur.next = new ListNode(val);
            cur = cur.next;
        }
    }
    // 若最后存在进位则链到链表尾部
    if (carry != 0) {
        cur.next = new ListNode(carry);
    }
    return ans;
}