2. Add Two Numbers

就是先加,加到其中一个是NULL

都是NULL 就看进不进位,进位就加1 返还RES.NEXT

其中一个不是的话 找到不是的那个

再加,最后再看进不进位

主要就是加完之后有2次进位要注意

逻辑上不难 琐碎太多

public ListNode addTwoNumbers(ListNode l1, ListNode l2) 
	{
        if(l1 == null || l2 == null) return l1==null? l2:l2==null?l1:null;
        
        ListNode res = new ListNode(0);
        ListNode temp = res;
        ListNode temp1 = l1;
        ListNode temp2 = l2;
        int v = 0;
        int rem = 0;
        while(temp1!=null && temp2!=null)
        {
            if(rem == 0) v = 0;
            else v = 1;
            //System.out.print(v);
            int sum = temp1.val + temp2.val + v;
            //System.out.println(sum);
            if(sum>=10)
            {
                rem = 1;
                sum%=10;
            }
            else rem = 0;
            

            temp.next = new ListNode(sum);
            temp = temp.next;
            temp1 = temp1.next;
            temp2 = temp2.next;
            //System.out.print(rem);
            
        }
        if(temp1 == null && temp2 == null)
        {
            //System.out.print(rem);
            
            if(rem == 1) temp.next = new ListNode(1);
        
            return res.next;
        }
        ListNode cur = temp1!=null? temp1:temp2;
        
        while(cur!=null)
        {
            if(rem == 1) v = 1;
            else v = 0;
            
            v+=cur.val;
            if(v>=10)
            {
                rem = 1;
                v = 0;
            }
            else rem = 0;
            
            temp.next = new ListNode(v);
            temp = temp.next;
            cur = cur.next;
            
        }
        
        if(rem == 1) temp.next = new ListNode(1);
        
        return res.next;

    }



二刷。

感觉没什么巧办法,就是楞做,楞做也不难。

要点有2个:
处理进位
处理NULL

public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) 
    {
        if(l1 == null || l2 == null) return l1 == null? l2:l1;
        
        ListNode dummy = new ListNode(-1);
        
        ListNode temp1 = l1;
        ListNode temp2 = l2;
        ListNode temp = dummy;
        int carry = 0;
        
        while(temp1 != null && temp2 != null)
        {
            int tempVal = temp1.val + temp2.val + carry;
            if(tempVal >= 10) carry = 1;
            else carry = 0;
            
            tempVal = tempVal%10;
            temp.next = new ListNode(tempVal);
            temp = temp.next;
            
            temp1 = temp1.next;
            temp2 = temp2.next;
            
        }
        
        if(temp1 == null) temp1 = temp2;
        
        while(temp1 != null)
        {
            int tempVal = temp1.val + carry;
            if(tempVal >= 10) carry=1;
            else carry = 0;
            
            tempVal = tempVal%10;
            temp.next = new ListNode(tempVal);
            temp = temp.next;
            
            temp1 = temp1.next;
        }
        
        if(carry == 1) temp.next = new ListNode(1);
        
        return dummy.next;
        
        
    }
}



三刷就是在打二刷的脸。

一个while loop解决。

public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if (l1 == null || l2 == null) return l1 == null? l2:l1;
        ListNode dummy = new ListNode(0);
        ListNode l0 = dummy;
        int carry = 0;
        while (l1 != null || l2 != null || carry > 0) {
            int a = l1 == null ? 0 : l1.val;
            int b = l2 == null ? 0 : l2.val;
            l0.next = new ListNode((a+b+carry)%10);
            l0 = l0.next;
            carry = (a + b + carry) / 10;
            if (l1 != null) l1 = l1.next;
            if (l2 != null) l2 = l2.next;
        }
        return dummy.next;
    }
}
原文地址:https://www.cnblogs.com/reboot329/p/5874195.html