Fork me on github

2 两数相加

第一次写的思路:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int carry = 0;
        ListNode head;
        ListNode dummy = head;
        while(l1 != null && l2 != null){
            int cur = l1.val + l2.val + carry;
            carry = cur / 10;
            cur %= 10;
            head = new ListNode(cur);
            head = head.next;
            l1 = l1.next;
            l2 = l2.next;
        }
        while(l1 != null){
            int cur = l1.val + carry;
            carry = cur / 10;
            cur %= 10;
            head = new ListNode(cur);
            head = head.next;
            l1 = l1.next;
        }

        while(l2 != null){
            int cur = l2.val + carry;
            carry = cur / 10;
            cur %= 10;
            head = new ListNode(cur);
            head = head.next;
            l2 = l2.next;
        }

        if(carry == 1){
            head = new ListNode(carry);
        }
        
        return dummy;
    }
}

可以看出,这样虽然能过,但是代码量很多,有重复,下面简化

public class Solution{
    public ListNode addTwoNumbers(ListNode l1, ListNode l2){
        ListNode dummy = new ListNode(0);
        ListNode head = dummy;
        int carry = 0;
        while(l1 != null || l2 != null){
            int n1 = (l1 != null) ? l1.val : 0;
            int n2 = (l2 != null) ? l2.val : 0;
            int sum = n1 + n2 + carry;
            carry = sum / 10;
            head.next = new ListNode(sum % 10);
            head = head.next;
            if(l1 != null)l1 = l1.next;
            if(l2 != null)l2 = l2.next;
        }
        if(carry > 0){
            head.next = new ListNode(carry);
        }
        
        return dummy.next;
    }
}
posted @ 2020-08-21 17:06  zjy4fun  阅读(98)  评论(0编辑  收藏  举报