leetcode-2-Add Two Numbers

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.

解析

用LinkList代表整數(shù)中每一個數(shù)字吉挣,模擬加法進位的方式進行求和計算信姓。例如:2 -> 4 -> 3
和5 -> 6 -> 4无牵,先計算個位數(shù) 2和5的和為7饥伊, 十位數(shù) 4和6的和為10谈山,逢十進一何吝,則該位的數(shù)字
為0,產生一位進位1到百位參與百位的數(shù)字求和继谚。那么百位的結果:3 + 4 + 1(這個1就是剛剛十位
相加產生的進位)烈菌,百位計算結果為8,所以最終返回結果 7 -> 0 -> 8

代碼(C++)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* pRoot = NULL;
        
        do {
            if (l1 == NULL) {
                pRoot = l2;
                break;
            } 
            
            if (l2 == NULL) {
                pRoot = l1;
                break;
            }
            
            int sum = l1->val + l2->val;
            int digit = sum % 10;
            int carry = sum / 10;
            pRoot = new ListNode(digit);
            ListNode* pTail = pRoot;
            l1 = l1->next;
            l2 = l2->next;

            while (l1 != NULL || l2 != NULL) {
                int sum = ((l1 != NULL) ? l1->val : 0) + ((l2 != NULL) ? l2->val : 0) + carry;
                int digit = sum % 10;
                carry = sum / 10;
                
                ListNode* pNew = new ListNode(digit);
                pTail->next = pNew;
                pTail = pNew;
                
                l1 = l1 != NULL ? l1->next : NULL;
                l2 = l2 != NULL ? l2->next : NULL;
            }
            
            if (carry == 1) {
                ListNode* pNew = new ListNode(carry);
                pTail->next = pNew;
            }
        } while (false);
        
        return pRoot;
    }
};
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末花履,一起剝皮案震驚了整個濱河市芽世,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌臭挽,老刑警劉巖捂襟,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咬腕,死亡現(xiàn)場離奇詭異欢峰,居然都是意外死亡,警方通過查閱死者的電腦和手機涨共,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門纽帖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人举反,你說我怎么就攤上這事懊直。” “怎么了火鼻?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵室囊,是天一觀的道長。 經常有香客問我魁索,道長融撞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任粗蔚,我火速辦了婚禮尝偎,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己致扯,他們只是感情好肤寝,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抖僵,像睡著了一般鲤看。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上裆针,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天刨摩,我揣著相機與錄音,去河邊找鬼世吨。 笑死澡刹,一個胖子當著我的面吹牛,可吹牛的內容都是我干的耘婚。 我是一名探鬼主播罢浇,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沐祷!你這毒婦竟也來了嚷闭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赖临,失蹤者是張志新(化名)和其女友劉穎胞锰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兢榨,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡嗅榕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吵聪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凌那。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吟逝,靈堂內的尸體忽然破棺而出帽蝶,到底是詐尸還是另有隱情,我是刑警寧澤块攒,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布励稳,位于F島的核電站,受9級特大地震影響囱井,放射性物質發(fā)生泄漏驹尼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一琅绅、第九天 我趴在偏房一處隱蔽的房頂上張望扶欣。 院中可真熱鬧,春花似錦、人聲如沸料祠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽髓绽。三九已至敛苇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顺呕,已是汗流浹背枫攀。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留株茶,地道東北人来涨。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像启盛,于是被迫代替她去往敵國和親蹦掐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容