leetcode 2 两数相加

Java解法

这个题的解法并不难想,就是从前往后加,有进位就记录下来,取余得到的结果就是当前位数的值。不过有两个地方容易走弯路:

一是新链表的生成,一般需要一个预指针pre,因为在后面当前cur指针移动的时候,会不断向后移动,返回的时候会失去头指针。还有就是,没有预指针的情况下,新链表的头指针要有专门的判断,后面的节点才能挂上去。

二是两个链表长度不一致时,当一个链表遍历结束后,要不要跳出循环,跳出循环的话,还要判断哪个为null,再拼到新链表后面,比较麻烦,可以采用高位补0的方式,为null的链表,计算时加0就不用关注这个问题啦。还有就是最后有进位的情况下,需要为进位新建节点。

/**

* Definition for singly-linked list.

* public class ListNode {

*    int val;

*    ListNode next;

*    ListNode(int x) { val = x; }

* }

*/

class Solution {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        ListNode pre = new ListNode(0);

        ListNode cur = pre;

        int carrier = 0;

        while (l1 != null || l2 != null) {

            int x = 0;

            int y = 0;

            if (l1 != null) {

                x = l1.val;   

            }

            if (l2 != null) {

                y = l2.val;   

            }

            int sum = x + y + carrier;

            int num = sum % 10;

            carrier = sum / 10;

            cur.next = new ListNode(num);

            cur = cur.next;


            if (l1 != null) {

                l1 = l1.next;   

            }

            if (l2 != null) {

                l2 = l2.next;   

            }

        }

        if (carrier > 0) {

            cur.next = new ListNode(carrier);

        }

        return pre.next;

    }

}

你可能感兴趣的:(leetcode 2 两数相加)