/**
* 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 dummyHead = new ListNode(0);
ListNode p=l1;
ListNode q=l2;
ListNode curr=dummyHead;
//计算两数的和时可能会出现溢出所以定义一个carry
int carry=0;
//遍历l1和l2直到到达他的尾部
while(p != null || q != null){ //l1或者l2不能为空
int x=(p !=null)?p.val:0; //如果当前节点不为空则将x设为p的值否则设置为0
int y=(q !=null)?q.val:0; //q同理
int sum=x+y+carry; //sum等于两个链表对应元素值相加
carry=sum/10; //设置carry的值为1或0;
curr.next=new ListNode(sum % 10);//创建一个数值为sum % 10的新节点,
//设置为当前节点的下一个节点,
curr=curr.next;//然后将当前节点前进一个节点
if(p !=null) p=p.next; //同时将p,q移向下一个节点。
if(q !=null) q=q.next;
}
if(carry > 0){ //判断carry=1是否成立,如果成立则返回列表追加一个含有数字1的新节点
curr.next= new ListNode(carry);
}
return dummyHead.next; //返回新链表节点的下一个节点
}
}