LeetCode【2】. Add Two Numbers--java實現,addtwonumbersjava

來源:互聯網
上載者:User

LeetCode【2】. Add Two Numbers--java實現,addtwonumbersjava

第二道題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

        簡單來說,給兩個單向鏈表,元素反向相加並以同樣規則進行儲存。注意進位!       一下是我的java程式:一、常規做法:逐一抽取計算,並考慮其中某個到達鏈尾的情況。
/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(in x) { val = x; } * } */public class Solution {    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ListNode slist = new ListNode(0);        ListNode clist = slist;        ListNode nlist = new ListNode(0);        //int sval = 0;        int flag = 0; // 進位                //1. if First Node of l1 or l2 is null         if(l1==null||l2==null){           return (l1==null)?((l2==null)?(slist):(l2)):(l1);        }        //2.1 當l1,l2都非鏈尾時,loop        while(true)        {            clist.val = (l1.val + l2.val + flag)%(10);            flag = (l1.val + l2.val + flag)/10;            //next node            l1 = l1.next;            l2  = l2.next;                        //2.1.1  若任意一個為鏈尾,則跳出            if(l1==null||l2==null){                 break;            }else{            clist.next= new ListNode(0);            clist =clist.next;            }        };//while                //2.2 如果兩個同時為鏈尾時        if(l1==null&&l2==null)        {            //2.2.1 若兩個為鏈尾且有進位,結果需進位            if(flag==1){               nlist = new ListNode(flag);               clist.next = nlist;            }else{                return slist;            }        }else //2.2 一個到達鏈尾、一個還未         {            ListNode onelist = new ListNode(0);            if(l1==null)            {onelist = l2;            }else            {onelist = l1; }            while(onelist!= null)            {                            clist.next =  new ListNode(0);              clist = clist.next;              clist.val = (onelist.val + flag)%10;              flag = (onelist.val + flag)/10;              onelist = onelist.next;            }            //2.2.1 當另外一個也到達鏈尾,判斷是否有進位            if(flag==1)            {                clist.next = new ListNode(flag);            }        }                return slist;            }}

二、思路清晰的做法:將鏈表先讀取為數值類型,相加後再將結果轉為規定鏈表。該方法思路十分清晰簡單,但是要逐一是否會溢出,時間及空間複雜度增加等問題。三、此處有更好更簡潔的解決方案供參考::Leetcode – Add Two Numbers (Java)。該方法分別判斷兩個鏈表是否到鏈尾了。就不需要像一那樣考慮多種情況,似乎很多問題都可以有將各種情況統一的方式。下次做之前要多思考是否有這種方式。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.