leetcode第二題 鏈表相加

作為一個(gè)代碼量很少的初學(xué)者,做這些題真的真的,有點(diǎn)難。可能難不在思路,而是,不知道怎么實(shí)現(xiàn)。

題目

第二題通過(guò)兩個(gè)類(lèi)似鏈表的數(shù)據(jù)結(jié)構(gòu)給出兩個(gè)整數(shù),其中每一個(gè)節(jié)點(diǎn)代表一位數(shù)字,然后要求輸出這兩個(gè)鏈表的和

//Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
//Output: 7 -> 0 -> 8
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
  1. 這里第一各節(jié)點(diǎn)代表個(gè)位,然后往后一次類(lèi)推,這樣就有一個(gè)進(jìn)位的問(wèn)題,并且就不涉及到一個(gè)再轉(zhuǎn)化的問(wèn)題,比如,如果第一個(gè)節(jié)點(diǎn)是最高位,那么就需要再轉(zhuǎn)化一次了,應(yīng)該用stack吧。
  2. 只給了一個(gè)構(gòu)造函數(shù),(假設(shè)其他的構(gòu)造函數(shù)都有了,比如拷貝、賦值)。作為菜鳥(niǎo),如何初始化第一個(gè)節(jié)點(diǎn)難住我了。 - -|

就這么兩點(diǎn)吧!

代碼如下:

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //使用result_tmp記錄,result的第一個(gè)節(jié)點(diǎn)
        //這樣再返回的時(shí)候直接返回result->next就可以
        //不用考慮初始化的問(wèn)題了
        ListNode *result = new ListNode(0) ,
                          *result_tmp(result);      

        //這里拷貝一遍,不修改原有的參數(shù)
        ListNode *l1_tmp(l1);
        ListNode *l2_tmp(l2);

        //這個(gè)是進(jìn)位的標(biāo)志
        int goHeight=0;

        while(l1_tmp != nullptr || l2_tmp != nullptr){
            //這個(gè)兩個(gè)數(shù)的和
            int add_tmp;

            //如果是個(gè)空節(jié)點(diǎn),那么值就可以是0                                               
            int l1_val=l1_tmp == nullptr?0:l1_tmp->val;                
            int l2_val=l2_tmp == nullptr?0:l2_tmp->val;
            add_tmp = l1_val + l2_val+goHeight;

            //處理進(jìn)位
            go = add_tmp/10;                                          
            add_tmp = add_tmp % 10;
            result->next=new ListNode(add_tmp);
            //繼續(xù)往下構(gòu)造鏈表
            result=result->next;
            //這里,如果是個(gè)空節(jié)點(diǎn) 
            //那么就只讓他等于nullptr就不要在往下訪問(wèn)了                                       
            l1_tmp=l1_tmp == nullptr?nullptr:l1_tmp->next;           
            l2_tmp=l2_tmp == nullptr?nullptr:l2_tmp->next;            
        }

        //如果循環(huán)完了有進(jìn)位的話,那么就需要在添加一個(gè)節(jié)點(diǎn)
        if (go==1){
            result->next=new ListNode(go);
        }

        //配合上面記錄的第一個(gè)節(jié)點(diǎn)
        //這里直接返回他的第二節(jié)點(diǎn)就可以了
        //應(yīng)為第一個(gè)節(jié)點(diǎn)的val=0,和兩個(gè)鏈表的和無(wú)關(guān)。
        return result_tmp->next;
    }

這里還有另一個(gè)方式

//直接一個(gè)空指針,然后操作檢測(cè),如果是個(gè)空指針,表明還沒(méi)放和
//如果不是空指針,那么說(shuō)明已經(jīng)放了和
ListNode *node = NULL

ListNode *tmp = new ListNode(res);
if(node == NULL) {
        node=tmp;
}else{
        node->next=tmp;
}

嗯,就這樣了。
變量名用的也是,亂七八糟。

leetcode同一段代碼提交兩次測(cè)試出來(lái)的Runtime 不一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 18,388評(píng)論 2 36
  • 一、 C/C++程序基礎(chǔ) 面試?yán)}1——分析代碼寫(xiě)輸出(一般賦值語(yǔ)句的概念和方法)。 面試?yán)}2—...
    LuckTime閱讀 2,112評(píng)論 2 42
  • http://blog.csdn.net/david21984/article/details/57451917 ...
    紫色冰雨閱讀 662評(píng)論 0 0
  • 2016.12.05 哎,日記丟失,我也不知道怎么辦,只能這樣了。完畢! 2016.12.06 晴 今天看了一天的...
    伊熙玉涵閱讀 333評(píng)論 0 0
  • 經(jīng)常開(kāi)車(chē)的朋友或許對(duì)警察開(kāi)出的罰單并不陌生,可你知道嗎,面對(duì)罰單也要及時(shí)繳納罰款,否則一不小心可能也會(huì)成為老...
    游宴河南閱讀 399評(píng)論 0 0

友情鏈接更多精彩內(nèi)容