/**
* 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 {
public ListNode addTwoNumbers(ListNode l1,ListNode l2) {
/*
题目信息:
两个非空的链表
逆序存储
除了数字0不会以0开头
*/
/*
* 依次相加
* 注意考虑进位
*/
// 创建头结点
ListNode head=new ListNode();
// 指向head
ListNode node=head;
// 依次将每个结点相加,记得考虑进位
// 初始化进位为0
int so=0;
// 遍历两个链表叠加
// 直到两个链表均遍历完
ListNode p=l1;
ListNode q=l2;
while(p!=null||q!=null) {
// 初始化进位、两个对应结点的和为进位大小
int sum=so;
if(p!=null) {
sum+=p.val;
}
if(q!=null) {
sum+=q.val;
}
// 创建node的下一个结点,大小为sum%10;
node.next=new ListNode(sum%10);
// 更新进位
so=sum/10;
/*
* 记得要考虑p、q结点是否为null
*/
if(p!=null) {
p=p.next;
}
if(q!=null) {
q=q.next;
}
node=node.next;
}
// 叠加之后要考虑是否仍存在进位,是否需要创建新结点
if(so==1) {
node.next=new ListNode(so);
}
return head.next;
}
}