力扣第2题-- 两数相加

在这里插入图片描述

起初对于这题我有点轻视,简单的想先把这个链表所表达的值先算出来,例如2->4->3就是342
没有想过这个链表所表达的值可能超过基本类型int、long。然后将转换后的两个数字相加,得到这个值807,然后想利用StringBuilder的reverse方法得到708,但是结果报了数值越界异常。

因此这一题的坑:没有提示链表所表示的值可能超过基本类型


转换思路的解法

既然链表是倒叙的,那么也就是说第一个节点是这个数字的最小值也可以称为个位数
第二个节点则都是十位数…
那么按照顺序将每一个节点相加得到一个新的链表。只是这个链表的每一个节点可能超过9。也就是说需要进一
我们发现9+9是18,取8进1,而高一位即使得到的也是9+9=18,那么18+1=19无论如何都不可能得到20,就是说每一个节点最多进1
那么剩下对每一个节点操作,如果节点val>=10,下一个节点的val+=1,同时自身节点的值需要val%=10

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    
    
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    
    
        ListNode l3 = l1, last = null;
        int c = 0, t1, t2;
        while (l1 != null || l2 != null) {
    
    
            if (l1 == null) {
    
    
                t1 = 0;
            } else {
    
    
                t1 = l1.val;
            }
            if (l2 == null) {
    
    
                t2 = 0;
            } else {
    
    
                t2 = l2.val;
            }
            ListNode tmp = new ListNode(t1 + t2);
            if (c == 0) {
    
    
                l3 = tmp;
                last = tmp;
                c++;
            } else {
    
    
                last.next = tmp;
                last = last.next;
            }
            if (l1 != null)
                l1 = l1.next;
            if (l2 != null)
                l2 = l2.next;
        }
        l1 = l3;
        while (l1 != null) {
    
    
            if (l1.val >= 10) {
    
    
                l1.val %= 10;
                if (l1.next == null) {
    
    // 特殊情况,例如124 456,高位4+6 >=10需要加一个节点
                    l1.next = new ListNode(1);
                    break;
                }
                l1.next.val += 1;
            }
            l1 = l1.next;
        }
        return l3;
    }

}

没想到效率还不错,击败了99.92%的用户。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41813208/article/details/109302898