【leetcode】2. 兩數(shù)相加

給出兩個 非空 的鏈表用來表示兩個非負(fù)的整數(shù)。其中厘灼,它們各自的位數(shù)是按照 逆序 的方式存儲的忿等,并且它們的每個節(jié)點只能存儲 一位 數(shù)字栖忠。

如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和庵寞。

您可以假設(shè)除了數(shù)字 0 之外狸相,這兩個數(shù)都不會以 0 開頭。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/add-two-numbers

解法1:
基于原鏈表結(jié)構(gòu)捐川,把l2的結(jié)構(gòu)加到l1上脓鹃,如果l2長于l1 則l1到末尾接l2.
需要判斷:(1)進(jìn)位問題(2)l2長度問題 (3)l1到了末尾,但仍然有進(jìn)位數(shù)古沥,需要新建node作為末尾瘸右。代碼比較麻煩

/**
 * 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) {
        int jinwei = 0;
        ListNode *startnode = l1;
        ListNode *lastnode = l1;
        while (l1 != NULL) {
            lastnode = l1;
            if (l1 != NULL && l2 != NULL)
            {
                int tmp_val = l1->val + l2->val + jinwei;
                jinwei = 0;
                if (tmp_val < 10){
                    l1->val = tmp_val;
                }
                else {
                    l1->val = tmp_val - 10;
                    jinwei = tmp_val / 10;
                    cout << l1->val << " " << jinwei << endl;
                }

                if (l1->next == NULL && l2->next != NULL)
                {

                    l1->next = l2->next;
                    l1 = l1->next;
                    l2 = NULL;
                }
                else 
                {
                    l1 = l1->next;
                    l2 = l2->next;
                }
                
            }

            else if (l1 != NULL && l2 == NULL ){
                int tmp_val = l1->val + jinwei;
                jinwei = 0;
                if (tmp_val < 10){
                    l1->val = tmp_val;
                }
                else {
                    l1->val = tmp_val % 10;
                    jinwei = tmp_val / 10;
                }
                l1 = l1->next;
            }

        }

        
        if (lastnode->next == NULL  &&  jinwei > 0)
        {
            ListNode *newnode = new ListNode(jinwei);
            jinwei = 0;
            lastnode->next = newnode;
        }
        return startnode;
    }



};

解法2:每次新建一個node,加上l1和l2的值岩齿,并輸出進(jìn)位太颤。直到l1 val & l2 val & 進(jìn)位均為空。

需要判斷:(1)進(jìn)位問題纯衍。代碼比較簡潔

/**
 * 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) {
        int jinwei = 0;
        ListNode* startnode = NULL;
        ListNode* lastnode = NULL;
        while ( !(l1 == NULL && l2 == NULL && jinwei == 0) ){
            ListNode* newnode = new ListNode(0);
            if (startnode == NULL){
                startnode = newnode;
            }
            if (lastnode == NULL) {
                lastnode = newnode;
            } 
            else {
               lastnode->next = newnode; 
               lastnode = newnode;
            }

            int val = 0;
            if (l1 != NULL){
                val += l1->val;
                l1 = l1->next;
            }
            if (l2 != NULL){
                val += l2->val;
                l2 = l2->next;
            }
            val += jinwei;


            newnode->val = val % 10;
            jinwei = val / 10;

        }
        return startnode;
    }
    
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栋齿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子襟诸,更是在濱河造成了極大的恐慌瓦堵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歌亲,死亡現(xiàn)場離奇詭異菇用,居然都是意外死亡,警方通過查閱死者的電腦和手機陷揪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門惋鸥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悍缠,你說我怎么就攤上這事卦绣。” “怎么了飞蚓?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵滤港,是天一觀的道長。 經(jīng)常有香客問我趴拧,道長溅漾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任著榴,我火速辦了婚禮添履,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脑又。我一直安慰自己暮胧,他們只是感情好锐借,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叔壤,像睡著了一般瞎饲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炼绘,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天嗅战,我揣著相機與錄音,去河邊找鬼俺亮。 笑死驮捍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脚曾。 我是一名探鬼主播东且,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼本讥!你這毒婦竟也來了珊泳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤拷沸,失蹤者是張志新(化名)和其女友劉穎色查,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撞芍,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡秧了,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了序无。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片验毡。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖帝嗡,靈堂內(nèi)的尸體忽然破棺而出晶通,到底是詐尸還是另有隱情,我是刑警寧澤哟玷,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布录择,位于F島的核電站,受9級特大地震影響碗降,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塘秦,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一讼渊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尊剔,春花似錦爪幻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仇轻。三九已至,卻和暖如春奶甘,著一層夾襖步出監(jiān)牢的瞬間篷店,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工臭家, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疲陕,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓钉赁,卻偏偏與公主長得像蹄殃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子你踩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 2. 兩數(shù)相加 給出兩個 非空 的鏈表用來表示兩個非負(fù)的整數(shù)诅岩。其中,它們各自的位數(shù)是按照 逆序 的方式存儲的带膜,并且...
    TheKey_閱讀 267評論 0 1
  • 2. 兩數(shù)相加 切題 一吩谦、Clarification 1、明確題目 鏈表钱慢、非空逮京、非負(fù)的整數(shù)、逆序束莫、每個節(jié)點只能存儲...
    leacoder閱讀 319評論 0 1
  • 題目描述 給出兩個非空的鏈表用來表示兩個非負(fù)的整數(shù)懒棉。其中,它們各自的位數(shù)是按照逆序的方式存儲的览绿,并且它們的每個...
    程序員A君閱讀 136評論 0 0
  • 給出兩個 非空 的鏈表用來表示兩個非負(fù)的整數(shù)策严。其中,它們各自的位數(shù)是按照 逆序 的方式存儲的饿敲,并且它們的每個節(jié)點只...
    羅健倫閱讀 179評論 0 0
  • 久違的晴天妻导,家長會。 家長大會開好到教室時怀各,離放學(xué)已經(jīng)沒多少時間了倔韭。班主任說已經(jīng)安排了三個家長分享經(jīng)驗。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,520評論 16 22