2. 两数相加
问题描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
代码
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//声明一个节点为头节点,因为是尾插,最终的node为最后一个节点的节点值
ListNode head=new ListNode(0);
ListNode node=head;
int sum=0;
int n=0;//用于判断是否需要进位
while(l1!=null||l2!=null)
{
int n1= l1!=null? l1.val:0;
int n2= l1!=null? l1.val:0;
sum=n1+n2+n;
n=sum/10;
//向后移,比如现在的node.next是第5位,那么node是第4位
node.next=new ListNode(sum%10);
//node变成第5位
node=node.next;
//计算完第一排,计算第二排
if(l1!=null)
{
l1=l1.next;
}
if(l2!=null)
{
l2=l2.next;
}
//如果最后又进位,再给尾部插入一个新的节点
if(n>0)
{
node.next=new ListNode(n);
}
}
return head.next;
}
}
二、思想
最开始的思想是每一排相加,超过9就给l1.next+1,但是有几个比较重要的点:
- l1可能比较短
- 最后一排需要进位