题目
给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
题解
遍历两个链表,也就是遍历每个节点,
当两个节点至少有一个不是null或者进位不是0的条件下
需要创建新的节点,每个新节点的值为 (进位+非空节点值) %10
进位数为(进位+非空节点值) /10
如果上述三个条件都不满足,那么说明两个节点都是null,并且进位是0,那么就不需要产生新的节点
直接返回初始节点即可
class Solution {
public ListNode addTwoNumbers(ListNode l1,ListNode l2){
//创建返回节点
ListNode result = new ListNode(0);
ListNode p = result;
//初始化进位值0
int carry = 0;
//遍历两个链表,当l1和l2至少有一个不是null或者carry!=0
//才需要创建新的节点
while(l1 != null || l2!=null || carry !=0){
//如果l1!=null,计算当前位需要加上l1的值
if(l1!=null){
carry += l1.val;
l1 = l1.next;
}
if(l2!=null){
carry += l2.val;
l2 = l2.next;
}
p.next = new ListNode(carry % 10);
carry /= 10;
p = p.next;
}
return result.next;
}
}