给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
ListNode res = new ListNode();
private int carry = 0;
private int flag = 1;
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//两个或期中一个是空的
if(l1==null&l2==null)
return null;
if(l1==null&&l2!=null)
return l2;
if(l2==null&&l1!=null)
return l2;
//当两个都不为空
while(l1!=null&&l2!=null){
add(l1.val,l2.val);
l1 = l1.next;
l2 = l2.next;
}
//当l2为空
if(l1==null&&l2!=null){
while(l2!=null){
add(l2.val,0);
l2 = l2.next;
}
}else if(l1!=null&&l2==null){//当l1为空
while(l1!=null){
add(l1.val,0);
l1 = l1.next;
}
}
//当最后生下了一个carry //加两位大于9 carry等于1 sum 等于0
if(carry!=0){
sumOf(carry);
}
return res;
}
public void add(int a,int b){
int res = a+b;
res+=carry;
int n1 = 0;
if(res>9){ //如果大于9
n1 = res%10;
carry=res/10;
}else
{
n1 = res;
carry =0;
}
sumOf(n1); //增加一个node
}
public void sumOf(int n){
ListNode tmp = new ListNode();
tmp.val = n;
tmp.next = null;
if(res.next==null&&flag==1){
res = tmp;
flag=0;
}else
{
ListNode tp = res;
while(tp.next!=null){
tp = tp.next;
}
tp.next = tmp;
}
}
}