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; } }