Raye's Journey

Leetcode 2

错解

怎么快速地将链表倒置

:confused:

wrong

最后还是因为溢出的问题

思路:


​        int k = 0;

        ListNode temp1 = l1;

        ListNode temp2 = l2;

        double resultl1 = 0;

        double resultl2 = 0;

        while (temp1 != null) {

            int tempvalue = temp1.val;

            resultl1 = resultl1 + tempvalue * Math.pow(10, k);

            k++;

            temp1 = temp1.next;

        }

就是将其转化为整数,因为链表的第一个元素是最低位,之后是十位,百位等

将得到的结果在转化为链表


int result = (int) (resultl1 + resultl2);

ListNode ans = new ListNode(0); //先取一个头节点

ListNode head = ans;

int length = Integer.toString(result).length();

for (int i = 0; i < length; i++) {

    ListNode temp = new ListNode(result % 10);

    head.next = temp;

    head = head.next;

    result = result / 10;

}

记录一下将整数转为string的操作

Integer.toString(result)

Math.pow函数的返回值必须是double类型的

但是这样会面临一个问题,也就是最开图片的那个,溢出!

正解

看了眼答案,才明白自己从开始就想错了


public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

    ListNode dummyHead = new ListNode(0);

    ListNode p = l1, q = l2, curr = dummyHead;

    int carry = 0;

    while (p != null || q != null) {

        int x = (p != null) ? p.val : 0;

        int y = (q != null) ? q.val : 0;

        int sum = carry + x + y;

        carry = sum / 10;

        curr.next = new ListNode(sum % 10);

        curr = curr.next;

        if (p != null) p = p.next;

        if (q != null) q = q.next;

    }

    if (carry > 0) {

        curr.next = new ListNode(carry);

    }

    return dummyHead.next;

}

最关键的就是

==int x = (p != null) ? p.val : 0;

int y = (q != null) ? q.val : 0;

int sum = carry + x + y;

carry = sum / 10;

curr.next = new ListNode(sum % 10);==

其实只需要从低位开始一位位的加上去就好了。

然后再把它们给链起来


>  cd ..