两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
一贯的愚蠢暴力解法
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode t1=l1;
ListNode t2=l2;
int flag=0;
while (t1!=null||t2!=null){
if(t1!=null&&t2!=null){
if(t1.val+t2.val+flag>9){
t1.val=(t1.val+t2.val+flag)%10;
flag=1;
t2.val=t1.val;
}else{
t1.val=t1.val+t2.val+flag;
t2.val=t1.val;
flag=0;
}
}else if(t1!=null){
if((t1.val+flag)<=9){
t1.val=t1.val+flag;
return l1;
}else{
while (t1!=null){
int temp=t1.val+flag;
t1.val=(t1.val+flag)%10;
flag=temp/10;
if(t1.next==null){
break;
}
t1=t1.next;
}
if(flag==1){
t1.next=new ListNode(flag);
}
return l1;
}
}else if(t2!=null){
if((t2.val+flag)>9){
while(t2!=null){
int temp=t2.val+flag;
t2.val=(t2.val+flag)%10;
flag=temp/10;
if(t2.next==null){
break;
}
t2=t2.next;
}
if(flag==1){
t2.next=new ListNode(flag);
}
}else{
t2.val=t2.val+flag;
}
return l2;
}
if(t1.next==null&&t2.next==null){
break;
}
t1=t1.next;
t2=t2.next;
}
if(flag==1){
t1.next=new ListNode(flag);
}
return l1;
}
}