2.两数相加
程序员文章站
2022-04-17 15:51:48
...
题目地址:两数相加
一开始看着题目有点绕,后来大概明白就是从前到后节点相加,当大于9时取余赋值,并在之后运算时进一,结果采用尾插法。
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(-1);
ListNode p=l1;
ListNode q=l2;
ListNode chs = head;
int count = 0; //进位时加上
while(p!=null||q!=null){
int a = 0;
int b = 0;
if(p!=null)
a=p.val;
if(q!=null)
b=q.val;
int sum = count+a+b;
count = sum/10;
chs.next=new ListNode(sum%10);
chs = chs.next;
if(p!=null)
p=p.next;
if(q!=null)
q=q.next;
}
return head.next;
}
}
结果:
发现漏了一种情况,在最后相加时,可能产生再次进位的情形。在最后返回之前,再进行一次判断:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(-1);
ListNode p=l1;
ListNode q=l2;
ListNode chs = head;
int count = 0; //进位时加上
while(p!=null||q!=null){
int a = 0;
int b = 0;
if(p!=null)
a=p.val;
if(q!=null)
b=q.val;
int sum = count+a+b;
count = sum/10;
chs.next=new ListNode(sum%10);
chs = chs.next;
if(p!=null)
p=p.next;
if(q!=null)
q=q.next;
}
if(count==1){
chs.next=new ListNode(1);
}
return head.next;
}
}
结果:
上一篇: 2. 两数相加
下一篇: 11. 盛最多水的容器