2. 两数相加

https://leetcode-cn.com/problems/add-two-numbers/

  • 模拟

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head=null,tail=null;
        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;
            if(head==null){
                head=tail=new ListNode(sum%10);
            }else{
                tail.next = new ListNode(sum%10);
                tail = tail.next;
            }
            carry = sum/10;
            if(l1!=null){
                l1=l1.next;
            }
            if(l2!=null){
                l2=l2.next;
            }
        }
        if(carry>0){
            tail.next = new ListNode(carry);
        }
        tail.next=null;
        return head;
    }
    
  • 递归

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    return dfs(l1,l2,0);
}

private ListNode dfs(ListNode l1, ListNode l2, int i) {
    if(l1==null&&l2==null&&i==0) return null;
    int sum = (l1!=null?l1.val:0)+(l2!=null?l2.val:0)+i;
    ListNode node = new ListNode(sum%10);
    node.next = dfs(l1==null?null:l1.next,l2==null?null:l2.next,sum/10);
    return node;
}

你可能感兴趣的:(2. 两数相加)