题目链接:https://leetcode-cn.com/problems/add-two-numbers/
/**
* 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 {
//将l2所在链表作为我们要返回的
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//创建一个新的节点head
ListNode head=l2;
//储存一个进位点num
int num=0;
int sum=0;
ListNode temp=null;
//1.while循环(l1!=null&&l2!=null)
while(l1!=null&&l2!=null){
//重点,保存l2最后一个节点
if(l2.next==null)temp=l2;
//加和 进位点+l1+l2 之后复原进位点
sum=l1.val+l2.val+num;
num=0;
//大于10 -10 temp。val=减后去,进位点++ temp后移 l1 l2后移
if(sum>=10){
sum-=10;
num=1;
l2.val=sum;
l2=l2.next;
l1=l1.next;
}
//小于。temp。val=sum temp后移 l1 l2后移
else if(sum<10){
l2.val=sum;
l2=l2.next;
l1=l1.next;
}
//1.
}
if(num==0){
if(l1!=null&l2==null)temp.next=l1;
}
else if(num==1){
if(l1!=null&&l2==null){
//保存现在的l1
ListNode templ1=l1;
//处理多进位
if(l1.val==9){
//持续判断,知道下一个为空
while(l1.next!=null&&l1.val==9){
l1.val=0;
l1=l1.next;
}
//如果最后一个不为空的数为9 把它变为0 最后进一位
if(l1.val==9){
l1.val=0;
l1.next=new ListNode(1);
}
//最后一个数不为9,正常+1
else l1.val+=1;
}
//如果不是多进位,正常加1
else l1.val+=1;
//把l1放在l2后面
temp.next=templ1;
}
if(l1==null&&l2!=null){
//处理多进位
if(l2.val==9){
while(l2.next!=null&&l2.val==9){
l2.val=0;
l2=l2.next;
}
if(l2.val==9){
l2.val=0;
l2.next=new ListNode(1);
}
else l2.val+=1;
}
else l2.val+=1;
}
if(l1==null&&l2==null)temp.next=new ListNode(1);
}
//返回head
return head;
}
}