leetcode002 Add Two Numbers

題目

2. Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

第一次提交

第一次提交代碼:


/**

 * Definition for singly-linked list.

 * public class ListNode {

 *     int val;

 *     ListNode next;

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

 * }

 */

public class Solution {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        ListNode pointer1 = l1;

        ListNode pointer2 = l2;

        while(pointer1 != null && pointer2 != null)

        {

            int tmp = pointer1.val + pointer2.val;

            if(tmp > 9)

            {

                int x = tmp / 10;

                int y = tmp % 10;

                pointer1.val = pointer2.val = y;

                if(pointer1.next == null && pointer2.next == null)

                {

                    pointer1.next = new ListNode(x);

                    pointer2.next = new ListNode(0);

                }else if(pointer1.next == null)

                {

                    pointer1.next = new ListNode(x);

                }else if(pointer2.next == null)

                {

                    pointer2.next = new ListNode(x);

                }else

                    pointer1.next.val += x;

            } else

            {

                pointer1.val = pointer2.val = tmp;

            }

            pointer1 = pointer1.next;

            pointer2 = pointer2.next;

        }



        if(pointer1 == null)

        {

            return l2;

        } else

        {

            return l1;

        }

    }

}

第一次結果細節(圖):

image

第一次提交總結:

考慮到要返回同樣的結構的鏈表,故每一位計算後直接同時賦值給l1,l2,返回值時,哪個鏈表還有值就返回哪個。再判斷進位時比較次數過多,還有優化的空間。

第二次提交

第二次提交代碼:


/**

 * Definition for singly-linked list.

 * public class ListNode {

 *     int val;

 *     ListNode next;

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

 * }

 */

public class Solution {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        ListNode pointer1 = l1;

        ListNode pointer2 = l2;

        ListNode pointer1Tmp = l1;

        while(pointer1 != null && pointer2 != null)

        {

            int tmp = pointer1.val + pointer2.val;



            if(tmp > 9)

            {

                int x = tmp / 10;

                pointer1.val = tmp % 10;

                if(pointer1.next == null)

                    pointer1.next = new ListNode(x);

                else if(pointer2.next ==null)

                    pointer2.next = new ListNode(x);

                else

                    pointer1.next.val +=x;

            } else

            {

                pointer1.val = pointer2.val = tmp;

            }

            pointer1Tmp = pointer1;

            pointer1 = pointer1.next;

            pointer2 = pointer2.next;

        }

        if(pointer1 == null)

        {

            pointer1Tmp.next = pointer2;

        }

        return l1;

    }

}

第二次結果細節(圖):

image

第二次提交總結:

效率毫無提升!!!

發佈了44 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章