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

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

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

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

思路

主要是一一相加和逆序的方式存儲
先說逆序儲存,看下圖
我們先聲明出指針p和指針q,還有指針head(主要用于return上而已),然后進(jìn)行一系列操作,之后,p = q,之后的操作就是對q進(jìn)行,至于p,只做一個動作,p = q
LeetCode | 兩數(shù)相加 C語言,# LeetCode,leetcode,c語言,算法

	int flag = 0;
	struct ListNode *p = NULL, *q = NULL, *head = NULL;
    while(l1 != NULL && l2 != NULL) {
        if(flag == 0) {
            flag = 1;
            p = (struct ListNode*)malloc(sizeof(struct ListNode));
            p->next = NULL;
            head = p;
        } else {
            q = (struct ListNode*)malloc(sizeof(struct ListNode));
            q->next = NULL;
            p->next = q;
            p = q;
        }
        l1 = l1->next;
        l2 = l2->next;
    }

至于相加嘛!好說,將對應(yīng)的兩個數(shù)加起來,然后檢查是否大于9,如果是,則要保留個位,并進(jìn)一位(也就是將十位數(shù)的部分放入下一個相加的過程中),以指針p的部分為例——指針q的部分也一樣。

p->val = l1->val + l2->val;
if(p->val > 9) {
	last = p->val / 10;
	p->val %= 10;
} else last = 0;

但是,要知道,l1與l2終會到達(dá)null,所以,對于剩余的部分也只是解決前面的“進(jìn)一位”遺留的問題而已.

    while(l1 != NULL) {
        q = (struct ListNode*)malloc(sizeof(struct ListNode));
        q->val = l1->val + last;
        if(q->val > 9) {
            last = q->val / 10;
            q->val %= 10;
        } else last = 0;
        q->next =NULL;
        p->next = q;
        p = q;
        l1 = l1->next;
    }
    while(l2 != NULL) {
        q = (struct ListNode*)malloc(sizeof(struct ListNode));
        q->val = l2->val + last;
        if(q->val > 9) {
            last = q->val / 10;
            q->val %= 10;
        } else last = 0;
        q->next =NULL;
        p->next = q;
        p = q;
        l2 = l2->next;
    }

到最后,倘若還存在進(jìn)一位,就得要再建一個節(jié)點(diǎn)。

    if(last > 0) {
        q = (struct ListNode*)malloc(sizeof(struct ListNode));
        q->val = last;
        if(q->val > 9) {
            last = q->val / 10;
            q->val %= 10;
        } else last = 0;
        q->next =NULL;
        p->next = q;
        p = q;
    }

解題方法

由思路可知

Code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *p = NULL, *q = NULL, *head = NULL;
    int flag = 0, last;
    while(l1 != NULL && l2 != NULL) {
        if(flag == 0) {
            flag = 1;
            p = (struct ListNode*)malloc(sizeof(struct ListNode));
            p->val = l1->val + l2->val;
            if(p->val > 9) {
                last = p->val / 10;
                p->val %= 10;
            } else last = 0;
            p->next = NULL;
            head = p;
        } else {
            q = (struct ListNode*)malloc(sizeof(struct ListNode));
            q->val = l1->val + l2->val + last;
            if(q->val > 9) {
                last = q->val / 10;
                q->val %= 10;
            } else last = 0;
            q->next =NULL;
            p->next = q;
            p = q;
        }
        l1 = l1->next;
        l2 = l2->next;
    }
    while(l1 != NULL) {
        q = (struct ListNode*)malloc(sizeof(struct ListNode));
        q->val = l1->val + last;
        if(q->val > 9) {
            last = q->val / 10;
            q->val %= 10;
        } else last = 0;
        q->next =NULL;
        p->next = q;
        p = q;
        l1 = l1->next;
    }
    while(l2 != NULL) {
        q = (struct ListNode*)malloc(sizeof(struct ListNode));
        q->val = l2->val + last;
        if(q->val > 9) {
            last = q->val / 10;
            q->val %= 10;
        } else last = 0;
        q->next =NULL;
        p->next = q;
        p = q;
        l2 = l2->next;
    }
    if(last > 0) {
        q = (struct ListNode*)malloc(sizeof(struct ListNode));
        q->val = last;
        if(q->val > 9) {
            last = q->val / 10;
            q->val %= 10;
        } else last = 0;
        q->next =NULL;
        p->next = q;
        p = q;
    }
    return head;
}

一些感想

其實,當(dāng)時在解決這道題的時候,碰到過這樣的問題

Line 70: Char 15: runtime error: member access within misaligned address 0xbebebebebebebebe for type 'struct ListNode', which requires 8 byte alignment [ListNode.c]0xbebebebebebebebe: note: pointer points here<memory cannot be printed>

后來,在我看了AuthurLEE的文章之后,我才知道原來是忘記在初始化的時候,讓指針指向NULL了(包括head指針,還有結(jié)構(gòu)體里面的next)文章來源地址http://www.zghlxwxcb.cn/news/detail-835680.html

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

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

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

相關(guān)文章

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

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

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

    2024年01月19日
    瀏覽(18)
  • 兩數(shù)相加 LeetCode熱題100

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

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

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

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

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

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

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

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

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

    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表示進(jìn)位。 鏈表的逆序

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

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

    2024年02月11日
    瀏覽(21)
  • LeetCode:1兩數(shù)之和 C語言

    1. 兩數(shù)之和 給定一個整數(shù)數(shù)組? nums ?和一個整數(shù)目標(biāo)值? target ,請你在該數(shù)組中找出? 和為目標(biāo)值? target ? 的那? 兩個 ?整數(shù),并返回它們的數(shù)組下標(biāo)。 你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是,數(shù)組中同一個元素在答案里不能重復(fù)出現(xiàn)。 你可以按任意順序返回答案

    2024年04月13日
    瀏覽(19)
  • 鏈表存數(shù)相加算法(leetcode第2題)

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

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

    2024年01月20日
    瀏覽(15)
  • 簡單C語言兩數(shù)相加

    ? ? 在C語言中,相加兩數(shù)是一個基本的要求,但其實也有復(fù)雜操作,比如 高精度加法 ,或者 鏈表相加 (還要考慮進(jìn)位),都是比較難的,那么今天我們來聊一聊簡單的problem a+b; ? ? 先發(fā)代碼 如上便是兩數(shù)之和的代碼,但是大家有沒有想過,如果是兩個超長整數(shù)相加,那么

    2024年02月07日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包