1、首先要判断两个链表均为空的情况
2、若两个链表不一样长,则短的链表的数据用0来填充
3、新建一个链表,用来存储求和的数据
4、每次求和之后都要新建一个节点用来存储取余后的结果,指针后移
5、需要判断运算完了之后carry有没有进位,若有进位需要给carry新建一个节点
/**
* 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 l3=new ListNode(0);//新建一个空节点
ListNode p=l3;
if(l1==null&&l2==null){//如果l1和l2均为空链表,则返回空
return l3;
}
int carry=0;//进位
int sum=0;//求和
int num=0;//余数
while(l1!=null||l2!=null){
int num1=l1==null?0:l1.val;//如果l1为空,则num1=0;否则num1=l1.val
int num2=l2==null?0:l2.val;
sum=num1+num2+carry;
//System.out.println(sum);
num=sum%10;//余数
p.next=new ListNode(0);
p.next.val=num;
p=p.next;//再新建一个节点
carry=sum/10;//进位
l1=l1==null?null:l1.next;//判断l1和l2是否为null,若不为空则指向下一个节点
l2=l2==null?null:l2.next;
}
if(carry!=0){
p.next=new ListNode(carry);//将进位存起来
}
//p=l3.next;
//while(p!=null) {
//System.out.println(p.val);
//p=p.next;
//}
return l3.next;
}
}