LeetCode - 2

Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. 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.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.




















思路

  • 從頭節(jié)點開始遍歷這兩個鏈表,將每一個對應節(jié)點進行相加,結果再除以10作為下一位相加的進位磷籍,同時記錄余數作為本位的結果们镜,一直處理蝙泼,直到所有的結點都處理完;

  • 當兩個鏈表都到末尾時探孝,判斷當前進位是否為1辩涝,是的話則增加新節(jié)點霍狰,值為1;否則直接返回結果;

  • 當其中一個鏈表未到末尾時砚哗,將新鏈表尾部next指向此鏈表的next位置婚陪,并判斷進位是否為1,為1的話則執(zhí)行類似第一步的操作频祝,直到進行為0泌参,返回結果.

  • 實現代碼:

    public class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
    }
    
    public ListNode addTwoNumbers(ListNode head1, ListNode head2) {
        if(null == head1 || null == head2) {
            return null;
        }
        ListNode head = new ListNode(0); // 建立新鏈表的頭節(jié)點
        ListNode result = head;
        int carry = 0; // 進位,值為 1 或 0
        while (head1.next != null && head2.next != null) {
            head1 = head1.next;
            head2 = head2.next;
            int val = (head1.val + head2.val + carry) % 10;
            carry = (head1.val + head2.val + carry) / 10;
            head.next = new ListNode(val);
            head = head.next;
        }
        if (head1.next != null) { // 鏈表1未結束
            head.next = head1.next;
        } else if (head2.next != null) { // 鏈表2未結束
            head.next = head2.next;
        }
    
        if (carry == 1) { // 有進位則繼續(xù)遍歷鏈表
            while (head.next != null) {
                head = head.next;
                int temp = head.val + carry;
                head.val = temp % 10;
                carry = temp / 10;
            }
            if (carry == 1) {
                head.next = new ListNode(1);
            }
        }
        return result;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末常空,一起剝皮案震驚了整個濱河市沽一,隨后出現的幾起案子,更是在濱河造成了極大的恐慌漓糙,老刑警劉巖铣缠,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異昆禽,居然都是意外死亡蝗蛙,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門醉鳖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捡硅,“玉大人,你說我怎么就攤上這事盗棵∽尘拢” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵纹因,是天一觀的道長喷屋。 經常有香客問我,道長瞭恰,這世上最難降的妖魔是什么屯曹? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上恶耽,老公的妹妹穿的比我還像新娘僵井。我一直安慰自己,他們只是感情好驳棱,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著农曲,像睡著了一般社搅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乳规,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天形葬,我揣著相機與錄音,去河邊找鬼暮的。 笑死笙以,一個胖子當著我的面吹牛,可吹牛的內容都是我干的冻辩。 我是一名探鬼主播猖腕,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恨闪!你這毒婦竟也來了倘感?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤咙咽,失蹤者是張志新(化名)和其女友劉穎老玛,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體钧敞,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蜡豹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了溉苛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镜廉。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖愚战,靈堂內的尸體忽然破棺而出桨吊,到底是詐尸還是另有隱情,我是刑警寧澤凤巨,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布视乐,位于F島的核電站,受9級特大地震影響敢茁,放射性物質發(fā)生泄漏佑淀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一彰檬、第九天 我趴在偏房一處隱蔽的房頂上張望伸刃。 院中可真熱鬧谎砾,春花似錦、人聲如沸捧颅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碉哑。三九已至挚币,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扣典,已是汗流浹背妆毕。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贮尖,地道東北人笛粘。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像湿硝,于是被迫代替她去往敵國和親薪前。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容