题目与事例
算法思路
模拟列竖式进行加法的方法,相同的位进行相加,满十进一。
代码实现
ans表示最后结果的头结点;cur1与cur2指向两个数的每一位,进行逐位相加;cur用于将相加结果逐位链接到ans后。
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode ans=null,cur1=l1,cur2=l2;
ListNode cur=null;
int carry=0; //进位
for(int sum; //相加结果
cur1!=null || cur2!=null; //仅当两数都遍历完退出循环
cur1=(cur1==null?cur1:cur1.next),cur2=(cur2==null?cur2:cur2.next) //不为空则后移,逐位遍历相加
){
sum=(cur1==null?0:cur1.val)+(cur2==null?0:cur2.val)+carry;
carry=sum/10;
if(ans==null){
ans=new ListNode(sum%10);
cur=ans;
}else {
cur.next=new ListNode(sum%10);
cur=cur.next;
}
}
if(carry==1) cur.next=new ListNode(1); //最后相加完成后,若还有进位,则需继续链接
return ans;
}