国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode:2. 兩數(shù)相加

這篇具有很好參考價值的文章主要介紹了LeetCode:2. 兩數(shù)相加。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

給你兩個?非空?的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照?逆序?的方式存儲的,并且每個節(jié)點只能存儲?一位?數(shù)字。

請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。

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

2. 兩數(shù)相加 - 力扣(LeetCode)

?LeetCode:2. 兩數(shù)相加,leetcode,算法

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */

解1:

// 方法一
int len(ListNode* head) {
    int len = 0;
    while(head){
        head=head->next;
        len++;
    }
    return len;
}

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* p1=l1;
        ListNode* p2=l2;
        int len1,len2;
        len1 = len(p1);
        len2 = len(p2);
        int flag = 0;
        bool maxBool = 1;
        if(len1>=len2) {
            if(len1==len2)
                flag = 1;
        }else{
            p1=l2;
            p2=l1;
            maxBool=0;
        }

        // if(len1<len2){
        //     p1=l2;
        //     p2=l1;
        //     maxBool=0;
        // }
        // else if(len1==len2) {
        //     flag = 1;
        // }
        int tmpval=0;
        while(p1) {
            if(p2) {
                p1->val += p2->val;
                p2=p2->next;
            }
            p1->val += tmpval;
            if(p1->val >= 10) {
                tmpval = 1;
                p1->val -= 10;
            }else{
                tmpval = 0;
            }
            if(p1->next==nullptr && tmpval) {
                if(p1->val != 0 && !flag){
                    p1->val += tmpval;
                }else {
                    ListNode* tail =new ListNode;
                    p1->next = tail;
                }  
            }
            p1=p1->next;
        }
        return maxBool ? l1:l2;
    }
};

解:2:

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* p1=l1;
        ListNode* p2=l2;
        int flag = 0;
        ListNode* tail1,*tail2;
        int tmpval=0;
        while(p1 || p2) {
            if(!p1) {
                flag = 1;
                p1 = tail1->next = new ListNode;
            }
            if(!p2) {
                flag = 0;
                p2 = tail2->next = new ListNode;
            }
            p1->val += p2->val;
            p1->val += tmpval;
            if(p1->val >= 10) {
                tmpval = 1;
                // p1->val %= 10;
                p1->val -= 10;
            }else{
                tmpval = 0;
            }
            if(p1->next==nullptr && tmpval) {
                // if((p1->val % 10) != 0 && ((p2->next!=nullptr) && flag)){
                // if((p1->val % 10) != 0  && flag){
                // if((p1->val - 10)!= 0  && flag){
                if(p1->val!= 0  && flag){
                    p1->val += tmpval;
                }
                else {
                    ListNode* tail =new ListNode;
                    p1->next = tail;
                }  
            }
            if(!p1->next) tail1 = p1;
            if(!p2->next) tail2 = p2;
            p2 = p2->next;
            p1 = p1->next;
        }
        return l1;
    }
};

解3

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* head = nullptr;
        ListNode* cur = head;
        int t = 0;
        while(l1!=nullptr || l2!=nullptr) {
            int a = l1 == nullptr ? 0 : l1->val;
            int b = l2 == nullptr ? 0 : l2->val;
            int r = a + b + t;
            if(r >= 10) {
                r -= 10;
                t = 1;
            }else {
                t = 0;
            }
            if(!head) {
                head = new ListNode(r);
                cur = head;
            } else {
                cur->next = new ListNode(r);
                cur = cur->next;
            }
            l1 = l1 == nullptr ? nullptr : l1->next;
            l2 = l2 == nullptr ? nullptr : l2->next;
        }
        if(t !=0 ) {
            cur->next = new ListNode(t);
        }
        return head;
    }
};

LeetCode 官方解答:文章來源地址http://www.zghlxwxcb.cn/news/detail-707916.html

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *head = nullptr, *tail = nullptr;
        int carry = 0;
        while (l1 || l2) {
            int n1 = l1 ? l1->val: 0;
            int n2 = l2 ? l2->val: 0;
            int sum = n1 + n2 + carry;
            if (!head) {
                head = tail = new ListNode(sum % 10);
            } else {
                tail->next = new ListNode(sum % 10);
                tail = tail->next;
            }
            carry = sum / 10;
            if (l1) {
                l1 = l1->next;
            }
            if (l2) {
                l2 = l2->next;
            }
        }
        if (carry > 0) {
            tail->next = new ListNode(carry);
        }
        return head;
    }
};

到了這里,關(guān)于LeetCode:2. 兩數(shù)相加的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

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

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

    我們來看看題目,,,, 往往困難的題只需要 簡單的敘述 。 好像只用找到兩個數(shù),整合成一個鏈表就可以。應(yīng)該 首先 我最快想到思路是 分別根據(jù)兩個鏈表求出對應(yīng)數(shù) 然后加一起 ,得到和 再把和拆分儲存到鏈表里 為此我們需要手撕一下鏈表頭插。 一頓操作猛如虎,一看

    2024年01月19日
    瀏覽(19)
  • LeetCode | 兩數(shù)相加 C語言

    LeetCode | 兩數(shù)相加 C語言

    Problem: 2. 兩數(shù)相加 主要是一一相加和逆序的方式存儲 先說逆序儲存,看下圖 我們先聲明出指針p和指針q,還有指針head(主要用于return上而已),然后進行一系列操作,之后,p = q,之后的操作就是對q進行,至于p,只做一個動作,p = q 至于相加嘛!好說,將對應(yīng)的兩個數(shù)加起

    2024年02月22日
    瀏覽(20)
  • leetcode 2. 兩數(shù)相加(java)

    leetcode 2. 兩數(shù)相加(java)

    難度 - 中等 leetcode 2. 兩數(shù)相加 給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。 你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。

    2024年02月09日
    瀏覽(22)
  • LeetCode-C#-0002.兩數(shù)相加

    該題目來源于LeetCode 如有侵權(quán),立馬刪除。 解法不唯一,如有新解法可一同討論。 0002兩數(shù)相加 給你兩個非空的鏈表,表示兩個非負的整數(shù),它們每位數(shù)字都是按照逆序的方式存儲的,并且每個節(jié)點只能存儲一位數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈

    2024年02月08日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu) | 鏈表】leetcode 2. 兩數(shù)相加

    【數(shù)據(jù)結(jié)構(gòu) | 鏈表】leetcode 2. 兩數(shù)相加

    個人主頁:兜里游客棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里游客棉花糖 原創(chuàng) 收錄于專欄【LeetCode】 原題鏈接:點擊直接跳轉(zhuǎn)到該題目 給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位

    2024年02月05日
    瀏覽(33)
  • leetcode 445. Add Two Numbers II(兩數(shù)相加)

    leetcode 445. Add Two Numbers II(兩數(shù)相加)

    用鏈表代表2個數(shù)字,這2個數(shù)字相加的和用鏈表返回。 最高位在鏈表的head. 思路: 1.鏈表逆序 數(shù)字相加是從低位到高位的,然而鏈表中的數(shù)字是從高位指向低位。 所以涉及到鏈表的逆序。 逆序之后只需從head到tail把兩個鏈表的數(shù)字相加,再用一個int表示進位。 鏈表的逆序

    2024年02月16日
    瀏覽(26)
  • 2023/07/02_leetcode每日一題_2.兩數(shù)相加

    給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。 你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。 示例: 輸入:l1 = [9,9,9,9,9,9

    2024年02月11日
    瀏覽(21)
  • 鏈表存數(shù)相加算法(leetcode第2題)

    鏈表存數(shù)相加算法(leetcode第2題)

    思路: 使用頭尾鏈表節(jié)點指針,用carry來存儲進位值 代碼實現(xiàn):

    2024年01月20日
    瀏覽(15)
  • 【算法Hot100系列】兩數(shù)相加

    【算法Hot100系列】兩數(shù)相加

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續(xù)學習,不斷總結(jié),共同進步,活到老學到老 導航 檀越劍指大廠系列:全面總

    2024年02月04日
    瀏覽(17)
  • 【算法】Add Two Numbers 兩數(shù)相加

    給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。 你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。 每個鏈表中的節(jié)點數(shù)在范圍

    2024年02月11日
    瀏覽(55)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包