【题目】

将两个用list存储的数字相加,返回相加后的值

 

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

 

Example 1:

[Leetcode 2]两数相加链表Add Two Numbers_易错点

Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.

Example 2:

Input: l1 = [0], l2 = [0]
Output: [0]

Example 3:

Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]

 

【思路】

注意审题,输入输出都是倒序!!之前没看清题,还用stack遍历到顶端再返回………

倒序正常找next相加就行,几个易错点

  • 再巩固下指针地址等,tmp是全程处理的listnode,用ans指向tmp,最后返回的是ans
  • 又因为tmp的root节点初始化值为0,最后返回ans.next跳过(Q:那为什么不直接初始化为空 A:因为空指针不方便操作!)
  • 如果出现如下错误,多了个0,【7,0,5,0】

           [Leetcode 2]两数相加链表Add Two Numbers_初始化_02

大概率因为写成了这样

[Leetcode 2]两数相加链表Add Two Numbers_Medium_03

为什么不能这么写,因为sum全局变量后,while判断的sum其实是上一轮的sum!!

那么我们思考sum>0的意义,是l1 l2均为null,但存在进位cnt的情况。

于是直接while循环外判断即可

        if(cnt>0)
            tmp.next=new ListNode(cnt);

 

【代码】

class Solution {
  public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int cnt=0;
        ListNode tmp=new ListNode(0);
        ListNode ans=tmp;
        while (l1!=null||l2!=null){
int sum=(l1==null?0:l1.val)+(l2==null?0:l2.val)+cnt; cnt=sum/10;
tmp.next
=new ListNode(sum%10); tmp=tmp.next;

//长度不等时
if(l1!=null) l1= l1.next; if(l2!=null) l2= l2.next; } if(cnt>0) tmp.next=new ListNode(cnt); return ans.next; } }