You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
/**
* 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) {
int a = l1.val+l2.val;
boolean flag = false; //进位标志
if(a >= 10) {
flag = true; a = a%10;
}
ListNode root = new ListNode(a);
ListNode s = root;
l1 = l1.next;l2 = l2.next;
int a1 = 0,a2 = 0,a3 = 0;
while(l1!=null||l2!=null||flag){//都为空,且没有进位
if(l1!=null) { a1 = l1.val;l1 = l1.next;}
if(l2!=null) { a2 = l2.val;l2 = l2.next;}
if(flag) {a3 = 1;flag=false;}
a = a1+a2+a3;
if(a>=10){ flag = true; a = a%10;}
root.next = new ListNode(a);
root = root.next;
a1 = a2 = a3 = 0;
}
return s;
}
}
Note:
在处理数字问题时,千万不要把数字转化为字符串,再转化为数字,因为这样就忽略了int、long的边界问题;
还有,在含有数字的问题中,一定要慎用加、减、乘、除运算,因为同样会出现边界问题。