成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:“最后再寫道算法吧,就用單鏈表做個加法...”

開發 開發工具 算法
兩數相加這道題,處理的就是最簡單的數學加法運算,只是它是建立在鏈表的基礎之上,所以難度在于對鏈表的處理。

[[286163]]

問:給出兩個非空的鏈表,來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式存儲的,并且每個結點只能存儲一位數字。將這兩個鏈表相加起來,返回一個新的鏈表,表示他們之和。

例如:342 + 465 = 807

 

 

兩數相加這道題,處理的就是最簡單的數學加法運算,只是它是建立在鏈表的基礎之上,所以難度在于對鏈表的處理。

加法運算,除了每一位的加法之外,還需要考慮進位的情況。針對這道題來說,鏈表的每一個結點存儲一位數字,并且是基于自然數字逆序存儲,也就是鏈頭到鏈尾保持低位到高位的順序,這樣就等于,進位的方向和單鏈表的方向一致。

由于單鏈表的特性,沒有前驅結點,無法回頭。在這道題的場景下,就只需要一次 while 循環,從鏈頭(低位)一直處理到鏈尾(高位),就可以解決。但是需要注意處理進位的情況,每一位結點在計算之后,需要按 10 取余數,進行存儲,多的需要進位到下一結點參與運算,正好這也符合單鏈表的處理思路。

那么我們就需要幾個變量,一個 carry 用來記錄每一位運算后的進位,還需要一個 dummy 結點,用于記錄兩個鏈表加法運算后的鏈表結點。

 

 


 

 

 

當我們處理到最長鏈表最后一個結點時,還需要對 carry(進位) 進行額外的處理,如果 carry 不為 0,表示繼續向高位進位,需要額外在創建一個新的結點存儲進位。

 

到這里就講解清晰了,直接上代碼。

  1. public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 
  2.   // 計算結果存儲的 dummy 結點 
  3.   ListNode dummy = new ListNode(0); 
  4.   ListNode p = l1, q = l2, curr = dummy; 
  5.   // 進位默認為 0 
  6.   int carry = 0; 
  7.   // 進入循環,以p和q兩個鏈表指針都走到頭為結束 
  8.   while (p != null || q != null) { 
  9.     int x = (p != null) ? p.val : 0; 
  10.     int y = (q != null) ? q.val : 0; 
  11.     // 進位參與運算 
  12.     int sum = carry + x + y; 
  13.     // 計算進位 
  14.     carry = sum / 10; 
  15.     // 構造新的結點存儲計算后的位數數值 
  16.     curr.next = new ListNode(sum % 10); 
  17.     curr = curr.next
  18.     if (p != null)  
  19.       p = p.next
  20.     if (q != null)  
  21.       q = q.next
  22.   } 
  23.   // 處理數字最高位末尾進位情況 
  24.   if (carry > 0) { 
  25.     curr.next = new ListNode(carry); 
  26.   } 
  27.   return dummy.next

這里用 p 和 q 分別存儲了 l1 和 l2 兩個鏈表的結點,以此為循環依據。循環跳出的條件為兩個鏈表都走到了末尾。

每一次循環中,處理每一位結點數數值并加上進位 carry 的值,運算后將數值取余存入新的結點,并將新的進位數存入 carry 進行存儲。

最后需要注意,當兩個鏈表都處理完成之后,還需要判斷最高位是否需要進位(carry > 0)。如果需要,創建一個新的鏈表結點存儲進位值。

這道利用鏈表做加法運算的題,就講解到這里,但是它還有一些變種題。

假如鏈表不是逆序按位存儲數字呢?如果是正序存儲。

例如:

1 → 2 → 3

+ 3 → 2 → 1

=> 123 + 321 = ?

【本文為51CTO專欄作者“張旸”的原創稿件,轉載請通過微信公眾號聯系作者獲取授權】

 

戳這里,看該作者更多好文

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2021-11-02 09:05:25

Redis

2022-01-10 11:04:41

單鏈表面試編程

2021-01-06 05:36:25

拉鏈表數倉數據

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

2022-03-21 09:05:18

volatileCPUJava

2024-08-13 17:56:52

單例裝飾器模式

2023-07-13 08:19:30

HaspMapRedis元素

2020-08-03 07:38:12

單例模式

2024-04-19 00:00:00

計數器算法限流算法

2024-01-15 06:42:00

高并發熱點賬戶數據庫

2022-05-23 08:43:02

BigIntJavaScript內置對象

2021-12-02 18:20:25

算法垃圾回收

2024-09-25 12:26:14

2019-12-25 11:22:19

負載均衡集群算法

2015-08-13 10:29:12

面試面試官

2022-04-10 18:10:24

CURD鏈表

2023-02-16 08:10:40

死鎖線程

2024-06-05 08:09:56

2020-02-18 15:15:05

Handler消息隊列執行任務

2022-12-06 09:03:31

MySQL索引
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲午夜av久久乱码 | 久久99这里只有精品 | 毛片免费观看视频 | 天天干天天插天天 | 亚洲国产欧美一区二区三区久久 | 盗摄精品av一区二区三区 | 91小视频在线 | 国产一级电影在线观看 | 欧美成人在线网站 | 国产成人精品午夜视频免费 | 欧美一级黄视频 | 欧美一级小视频 | 毛片一级电影 | 久久久久亚洲 | 国产精品国产精品国产专区不卡 | 97视频人人澡人人爽 | 日韩精品一区二区三区在线观看 | 国产精品精品3d动漫 | 亚洲一区二区在线播放 | av国产精品 | 99精品视频在线观看 | 亚洲成人国产综合 | 精品91久久久 | 欧美一区二区三区 | 国产色 | 色综合视频在线 | 2022精品国偷自产免费观看 | 99re在线视频观看 | 欧美精品久久久久久久久老牛影院 | 99久久精品国产一区二区三区 | 性一交一乱一透一a级 | 欧美极品在线播放 | 欧美精品一区在线 | 中文字幕在线一区 | 91成人在线 | 91婷婷韩国欧美一区二区 | 国产在线观看一区二区三区 | www.亚洲.com| 国产一区在线免费 | 国产羞羞视频在线观看 | 色一情一乱一伦一区二区三区 |