LeetCode之两数相加

 

  • 题目

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807
    

最初的答案

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode i;
        ListNode j;
        ListNode node=null;

        int temp;
        int count=0;
     for(i=l1, j=l2;i!=null || j!=null;i=l1.next,j=l2.next){
          boolean flag =false;
         if(flag){
             temp= i.val+j.val+1;
             flag=false;
         }else
             temp= i.val+j.val;

        if(temp>=10){
            temp-=10;
            flag=true;
        }
         if(count==0){
                       node= new ListNode(temp);
             count++;

         }else
         {
             node.next=new ListNode(temp);
             node=node.next;
             count++;

         }

     }
        return node;


    }
}
  • 绞尽脑汁的答案

    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode i = l1;
            ListNode j = l2;
            ListNode node = new ListNode(0);
            ListNode curr = node;
            int temp;
            //进位
            int count = 0;
            while (i != null || j != null) {
          //巧妙使用三目运算符,减少if使用;巧用进位
                temp = ((i != null) ? i.val : 0) + ((j != null) ? j.val : 0) + count;
                count = temp / 10;
                curr.next = new ListNode(temp % 10);
                curr = curr.next;
                if (i != null) i = i.next;
                if (j != null) j = j.next;
            }
            if (count > 0) {
                curr.next = new ListNode(1);
            }
            return node.next;
        }
    
    }