国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

動畫圖解“兩數(shù)相加”,小學(xué)生都能看懂

運(yùn)維 數(shù)據(jù)庫運(yùn)維
大家好,我是來自于華為的程序員小熊。今天給大家?guī)硪坏栏骰ヂ?lián)網(wǎng)大廠面試中??嫉纳婕暗芥湵硐嚓P(guān)的中檔題題,即力扣上的第 2 題-兩數(shù)相加。

[[420833]]

本文轉(zhuǎn)載自微信公眾號「程序員小熊」,作者Dine。轉(zhuǎn)載本文請聯(lián)系程序員小熊公眾號。

前言

大家好,我是來自于華為的程序員小熊。今天給大家?guī)硪坏栏骰ヂ?lián)網(wǎng)大廠面試中常考的涉及到鏈表相關(guān)的中檔題題,即力扣上的第 2 題-兩數(shù)相加。

本文主要介紹迭代+虛擬頭節(jié)點(diǎn)的策略來解答此題,供大家參考,希望對大家有所幫助。

兩數(shù)相加

給你兩個非空的鏈表,表示兩個非負(fù)的整數(shù)。

它們每位數(shù)字都是按照逆序的方式存儲的,并且每個節(jié)點(diǎn)只能存儲一位數(shù)字。

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

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

示例1

其它示例及提示

解題思路

由于題目已明確告知每個節(jié)點(diǎn)只能存儲一位數(shù)字,因此當(dāng)兩鏈表相同位置的數(shù)字之和大于 10 時,需要考慮進(jìn)位的問題。

例兩個鏈表:l1 = [3,4,3], l2 = [5,6,4]。

當(dāng)他們的第二個節(jié)點(diǎn)的數(shù)字相加時,需要進(jìn)位 1 到第三個節(jié)點(diǎn)的數(shù)字之和。

由于需要遍歷一遍兩個鏈表,所以考慮采用迭代的思想。

注意點(diǎn)

1.考慮中間位進(jìn)位的問題;

例如 l1 = [3,4,3], l2 = [5,6,4]。

2.考慮最高位進(jìn)位的問題。

例如 l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]。

舉栗

以 l1 = [3,4,3], l2 = [5,6,4] 為例子,如下圖示:

示例

不斷遍歷兩個鏈表,將相同位置的節(jié)點(diǎn)的數(shù)值相加,并更新到新的鏈表;

相同位置的節(jié)點(diǎn)的數(shù)值相加并更新

遇到需要進(jìn)位時,保留需要進(jìn)位的值;

需要進(jìn)位時,先保留進(jìn)位

將上次進(jìn)位的值與兩鏈表本次節(jié)點(diǎn)的和相加;

進(jìn)位更新

完整的處理過程,如下動圖示:

兩鏈表節(jié)點(diǎn)值相加更新到新鏈表,完整處理過程

Show me the Code

「C」

  1. struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ 
  2.     struct ListNode *dummyHead = (struct ListNode*)malloc(sizeof(struct ListNode)); 
  3.     dummyHead->val = 0; 
  4.     dummyHead->next = NULL
  5.     struct ListNode *node = dummyHead; 
  6.     int carry = 0;  //  進(jìn)位 
  7.  
  8.     /* 遍歷兩個鏈表 */ 
  9.     for (struct ListNode* p = l1, *q = l2; p != NULL || q != NULL;) { 
  10.         /* 相同位置節(jié)點(diǎn)值之和 */ 
  11.         int sum = carry; 
  12.         sum += (p != NULL) ? p->val : 0; 
  13.         sum += (q != NULL) ? q->val : 0; 
  14.          
  15.         /* 將兩鏈表相同位置的和的值,不斷更新到新的鏈表 */ 
  16.         node->next = (struct ListNode*)malloc(sizeof(struct ListNode)); 
  17.         node = node->next
  18.         node->val = sum % 10; 
  19.         node->next = NULL
  20.  
  21.         /* 進(jìn)位處理,兩鏈表不斷遍歷 */ 
  22.         carry = sum / 10; 
  23.         p = (p == NULL) ? p : p->next
  24.         q = (q == NULL) ? q : q->next
  25.     } 
  26.  
  27.     /* 最高位之和如果大于 10,增加一位,新鏈表的節(jié)點(diǎn)值為 1 */ 
  28.     if(carry != 0) { 
  29.         node->next = (struct ListNode*)malloc(sizeof(struct ListNode)); 
  30.         node = node->next
  31.         node->val = 1; 
  32.         node->next = NULL
  33.     } 
  34.  
  35.     return dummyHead->next

「C++」

  1. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 
  2.     ListNode* dummyHead = new ListNode(0);   
  3.     ListNode* node = dummyHead; 
  4.  
  5.     int carry = 0; 
  6.     for (ListNode* p = l1, *q = l2; p != nullptr || q != nullptr;) { 
  7.         int sum = carry; 
  8.         sum += (p == nullptr) ? 0 : p->val; 
  9.         sum += (q == nullptr) ? 0 : q->val; 
  10.  
  11.         node->next = new ListNode(sum % 10); 
  12.         node = node->next
  13.  
  14.         carry = sum / 10; 
  15.         p = (p == nullptr) ? p : p->next
  16.         q = (q == nullptr) ? q : q->next
  17.     } 
  18.  
  19.     if (carry != 0) { 
  20.         node->next = new ListNode(carry); 
  21.     } 
  22.  
  23.     return dummyHead->next

「Java」

  1. ListNode addTwoNumbers(ListNode l1, ListNode l2) { 
  2.     ListNode dummyHead = new ListNode(-1); 
  3.     ListNode cur = dummyHead; 
  4.  
  5.     int carry = 0; 
  6.     while (l1 != null || l2 != null) { 
  7.         int sum = carry; 
  8.         sum += (l1 == null) ? 0 : l1.val; 
  9.         sum += (l2 == null) ? 0 : l2.val; 
  10.  
  11.         cur.next = new ListNode(sum % 10); 
  12.         cur = cur.next
  13.  
  14.         carry = sum / 10; 
  15.         l1 = (l1 == null) ? l1 : l1.next
  16.         l2 = (l2 == null) ? l2 : l2.next
  17.     } 
  18.  
  19.     if (carry != 0) { 
  20.         cur.next = new ListNode(carry); 
  21.     } 
  22.  
  23.     return dummyHead.next

「Python3」

  1. def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: 
  2.     dummyHead = ListNode(0) 
  3.     node = dummyHead 
  4.     carry = 0 
  5.  
  6.     while(l1 or l2): 
  7.         sum = carry 
  8.         if(l1): 
  9.             sum += l1.val                 
  10.             l1 = l1.next                 
  11.         if l2: 
  12.             sum += l2.val 
  13.             l2 = l2.next 
  14.  
  15.         node.next = ListNode(sum % 10) 
  16.         node = node.next 
  17.         carry = sum//10 
  18.  
  19.     if carry != 0: 
  20.         node.next = ListNode(carry) 
  21.  
  22.     return dummyHead.next   

「Golang」

  1. func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { 
  2.     dummy := new(ListNode) 
  3.     node := dummy 
  4.     carry := 0 
  5.     for l1 != nil || l2 != nil { 
  6.         sum := carry 
  7.         if l1 != nil { 
  8.             sum += l1.Val 
  9.             l1 = l1.Next 
  10.         } 
  11.  
  12.         if l2 != nil { 
  13.             sum += l2.Val 
  14.             l2 = l2.Next 
  15.         } 
  16.  
  17.         node.Next = new(ListNode) 
  18.         node = node.Next 
  19.         node.Val = sum % 10 
  20.  
  21.         carry = sum / 10 
  22.     } 
  23.      
  24.     if carry != 0 { 
  25.         node.Next = &ListNode{Val: carry} 
  26.     } 
  27.  
  28.     return dummy.Next 

復(fù)雜度分析

時間復(fù)雜度:O(max(m, n)),其中 m 和 n 分別為兩個鏈表的長度,需要遞歸調(diào)用兩個鏈表的每個節(jié)點(diǎn)一次。

空間復(fù)雜度:O(1),未開辟額外存儲空間。

 

責(zé)任編輯:武曉燕 來源: 程序員小熊
相關(guān)推薦

2021-01-22 09:39:54

人工智能人工智能技術(shù)

2019-12-27 09:47:05

大數(shù)據(jù)TomcatWeb

2022-07-04 08:31:42

GitOpsGit基礎(chǔ)設(shè)施

2020-01-21 10:16:15

Kubernetes教程容器

2019-10-08 10:10:52

中臺 IT后臺

2020-12-01 09:03:22

分庫分表MySQL

2018-11-21 09:40:57

熔斷實(shí)踐AOP

2018-11-21 15:40:08

HTTP協(xié)議前端

2019-10-21 08:22:36

豐巢刷臉取件

2020-09-28 14:25:39

HTTPS加密算法

2025-06-12 09:23:08

網(wǎng)絡(luò)AP網(wǎng)絡(luò)協(xié)議

2021-09-27 13:50:13

Python裝飾器函數(shù)

2020-06-22 08:07:48

Spring依賴場景

2019-09-05 11:14:12

監(jiān)控系統(tǒng)拓?fù)鋱D

2017-12-20 10:08:53

2019-01-22 09:37:47

紅黑樹數(shù)據(jù)二叉樹

2023-01-26 00:22:01

分布式架構(gòu)大文件

2018-05-24 22:58:26

大數(shù)據(jù)分布式計算統(tǒng)計

2020-08-06 13:48:16

Python 開發(fā)編程語言

2020-09-08 06:30:59

微服務(wù)代碼模塊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

久久久久久亚洲精品美女| 成人免费网站在线观看视频| 红桃视频国产精品| 久久久免费精品视频| 日本中文字幕中出在线| 欧美性xxxxhd| 特黄aaaaaaaaa毛片免费视频| 国产经典欧美精品| 一区二区三区四区国产| 在线成人亚洲| 亚洲iv一区二区三区| 1204国产成人精品视频| 一区二区国产精品视频| 另类激情视频| 亚洲视频专区在线| 免费欧美电影| 伊人av综合网| 天堂久久午夜av| 亚洲欧美另类中文字幕| 末成年女av片一区二区下载| 精品国产免费一区二区三区香蕉| seseavlu视频在线| 色狠狠桃花综合| 国产最新视频在线观看| 精品久久久久久亚洲国产300| 成视人a免费观看视频| 亚洲精品福利视频网站| 色视频www在线播放| 亚洲国产成人二区| 色婷婷综合久久久中文字幕| 免费在线观看一级毛片| 欧美日韩精品电影| 日日夜夜天天综合入口| 亚洲女同性videos| 综合久久2023| 久久成人一区二区| 亚洲动漫精品| 亚洲自拍偷拍色图| 久久精品人人| 亚洲色图都市激情| 国产视频一区二区在线观看| 国产精品影视| 欧美猛男超大videosgay| 国产传媒在线| 中文字幕av日韩| 日韩一区二区三区精品视频第3页| 88xx成人精品| 久久久久亚洲| 日韩欧美第二区在线观看| 裸体在线国模精品偷拍| 国产日韩一区二区在线| 日韩美女视频19| 国产尤物视频在线| 欧美精品一区二区高清在线观看| 亚洲成人高清| 国产在线播放不卡| 奇米影视在线99精品| 日本在线观看a| 亚洲成人综合视频| 欧美激情成人动漫| 欧美激情奇米色| 欧美日韩a区| 久久人人爽人人爽人人av| **网站欧美大片在线观看| 午夜在线视频| 欧美精品18videosex性欧美| 好看的日韩av电影| 欧美日韩在线不卡视频| 日韩欧美在线一区| 午夜精品成人av| 国产一区二区视频在线观看| 国模一区二区三区白浆| 石原莉奈一区二区三区高清在线| 欧美一区二区三区啪啪| 精品国产影院| 亚洲精品9999| 一区二区三区在线观看动漫| 国产理论电影在线| 丁香六月久久综合狠狠色| 中国免费黄视频| 欧美经典一区二区| 免费观看亚洲天堂| 神马影院午夜我不卡| 中文字幕不卡一区| 欧美大片aaa| 欧美在线视频免费| 欧美日韩国产成人精品| 亚洲一区二区三区777| 亚洲制服一区| 久久久久久国产精品一区| 国产精品一区二区不卡| 成人h视频在线观看| 成人天堂资源www在线| 国产精品视频二区三区| 欧美另类精品xxxx孕妇| 免费亚洲视频| 日韩欧美亚洲系列| 日本高清不卡的在线| 99久久精品国产导航| 日本资源在线| 国产精品一区二区不卡视频| 亚洲欧美日韩国产另类专区| 国产成人精品一区二区三区免费| 含羞草久久爱69一区| 亚洲成人黄色影院| 色老板在线视频一区二区| 日本福利视频在线| 亚洲欧美日韩一区在线| 亚洲永久免费精品| 在线日本视频| 成人自拍视频网站| 欧美视频专区一二在线观看| 妖精一区二区三区精品视频 | 国产午夜在线| 亚洲香蕉伊综合在人在线视看| 欧美 日韩 国产一区二区在线视频 | 日本不卡在线视频| 国产三级视频在线看| 国产成人短视频| 国产精品电影一区二区| 欧美成人一级| 男女av免费观看| 亚洲欧美专区| 国产乱码在线| 91精品国产精品| 最新日韩一区| 自拍偷拍一区二区三区| 欧美精品日韩精品| 国产精品二区影院| 欧美套图亚洲一区| 亚洲巨乳在线| 狠狠噜噜久久| 另类尿喷潮videofree| 青娱在线视频| 欧美性xxxxx极品| 成人av二区| 久草在线免费福利| 成人天堂噜噜噜| 精品久久久中文| 91精品国产自产在线观看永久∴| 在线播放你懂的| 国产美女精品在线观看| 欧美日本一区二区| 青青草成人在线观看| 国产精品迅雷| av网站在线观看不卡| 久久97久久97精品免视看| 久久蜜桃av一区精品变态类天堂| 在线免费成人| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 麻豆一区二区在线观看| 欧美国产在线观看| 色综合色综合| 国产视频一区二区| 亚洲国产精品无码av| 性欧美激情精品| 欧美性猛交xxxx乱大交3| 久久成人在线| 欧洲av一区二区| 99色在线视频| 国产精品少妇自拍| 欧州一区二区| а√资源新版在线天堂| 男人天堂手机在线视频| 久久久久久久成人| 黄色91在线观看| 玖玖在线精品| 亚洲精品不卡在线观看| 四虎影视精品成人| 中文一区一区三区免费| 欧美精品生活片| 亚洲www啪成人一区二区麻豆 | 天堂社区日本电影超碰| 国产福利久久精品| 亚洲片av在线| 国产精品久久久久久久久免费丝袜| 日韩黄色大片网站| mm视频在线视频| 999sesese| 日韩成人在线资源| 5566日本婷婷色中文字幕97| 欧美影视一区二区三区| 成人av网在线| 欧美另类综合| 麻豆国产一区二区三区四区| 国产小视频在线播放| 亚洲欧美日韩另类| 国产精品色视频| 亚洲精品乱码久久久久久蜜桃91 | 伊人蜜桃色噜噜激情综合| 欧美一区2区| 亚洲人成亚洲人成在线观看| caoporen国产精品视频| 日韩精品四区| 在线观看特色大片免费视频| 成人黄18免费网站| 热re99久久精品国99热蜜月| 欧美激情精品久久久久久变态| 538在线一区二区精品国产| 国产日韩欧美在线一区|