目录

leetcode-hot-100-2两数相加

【leetcode hot 100 2】两数相加

解法一:申请三个指针,分别指向 l1、l2、new_l 。先设置第一个节点;再l1、l2循环设置后续节点;若某一条链未结束,继续循环设置;若最后 enter1 (下一位是否进1)仍为真,则多了一位还要新加一位1。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode sum_list = new ListNode();
        ListNode p1 = l1.next, p2 = l2.next, ps = sum_list;
        int sum = l1.val+l2.val;
        boolean enter1 = sum>=10 ? true : false;
        
        // 先设置第一个节点
        sum_list.val = sum%10;
        sum_list.next = null;
        
        // 设置后续节点
        while(p1!=null && p2!=null){
            sum = enter1 ? p1.val+p2.val+1 : p1.val+p2.val;
            enter1 = false;
            if(sum >= 10){
                enter1 = true;
            }
            ListNode temp = new ListNode();
            temp.val = sum%10;
            temp.next = ps.next;
            ps.next = temp;
            ps = ps.next;
            p1 = p1.next;
            p2 = p2.next;
        }

        // 某一条链未结束
        p1 = p1!=null ? p1 : p2;
        while(p1!=null){
            sum = enter1 ? p1.val+1 : p1.val;
            enter1 = false;
            if(sum >= 10){
                enter1 = true;
            }
            ListNode temp = new ListNode();
            temp.val = sum%10;
            temp.next = ps.next;
            ps.next = temp;
            ps = ps.next;
            p1 = p1.next;
        }

        // 多了一位,还要进1
        if(enter1){
            ListNode temp = new ListNode();
            temp.val = 1;
            temp.next = ps.next;
            ps.next = temp;
        }
        return sum_list;
    }
}