记录一下算法题的学习11
两数相加
- 将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 0,举例说明:342+465=807(长度一样,不考虑),9999999+0009999=10009998
- 每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值
- 如果两个链表全部遍历完毕后,进位值为 1,则在新链表最前方添加节点 1
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head=new ListNode(0);//初始化头结点为0
ListNode tail=head;//初始化尾节点为0
int carry=0;//初始化进位为0
while(l1!=null||l2!=null){
int x=l1!=null?l1.val:0;//三元运算符进行判断,例如如果x=li的情况下节点不为空,那么就选择l1.val,否则节点值为0;
int y=l2!=null?l2.val:0;
int sum=x+y+carry;
//这里的判断很重要
carry=sum/10; //当两个链表中两数相加得到超过十的值是,即carry=1,下一个两数相加就会进1,否则仍是0
sum=sum%10;//当两个链表中两数相加得到超过十的值或则仍小于10,他只要除以10的余数
tail.next=new ListNode(sum); //存入链表
tail=tail.next;
if(l1!=null){
l1=l1.next;
}
if(l2!=null){
l2=l2.next;
}
}
if(carry>0){
tail.next=new ListNode(carry);
}
return head.next;
}
}
结束拜拜!