题目一
思路分析
1.将来两个链表看作长度相同,缺位补0
2.没计算一个节点,考虑是否需要进位
3.防止头指针丢失,使用预指针,指向真正的链表头
代码实现
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//定义一个指针
ListNode pre = new ListNode(0);
//最为预指针
ListNode cur = pre;
//上一节点进位数
int carry = 0;
//判断链表l1,l2是否为空
while (l1 != null || l2 != null) {
//获取根节点的值
int x = l1 == null ? 0 : l1.val;
int y = l2 == null ? 0 : l2.val;
//两个链表节点的的合
int sum = x + y + carry;
//需要进位的数
carry = sum / 10;
//进位后,当前节点的值
sum = sum % 10;
//将这值,存入头节点的下一个节点
cur.next = new ListNode(sum);
//指针后移
cur = cur.next;
//判断链表是否为空
if (l1 != null) {
//不为空节点后移
l1 = l1.next;
}
//同上
if (l2 != null) {
l2 = l2.next;
}
}
//当两个链表相加结束后,判断是否需要进位
if(carry==1){
//将进位数1添加到来链表结尾
cur.next=new ListNode(carry);
}
//因为存在预指针
return pre.next;
}
}