摘要:給出兩個非空的鏈表用來表示兩個非負的整數(shù)。其中,它們各自的位數(shù)是按照逆序的方式存儲的,并且它們的每個節(jié)點只能存儲一位數(shù)字。如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和。您可以假設除了數(shù)字之外,這兩個數(shù)都不會以開頭。
給出兩個?非空 的鏈表用來表示兩個非負的整數(shù)。其中,它們各自的位數(shù)是按照?逆序?的方式存儲的,并且它們的每個節(jié)點只能存儲?一位?數(shù)字。
如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和。
您可以假設除了數(shù)字 0 之外,這兩個數(shù)都不會以 0?開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807
實現(xiàn)思路:
典型的鏈表遍歷操作題,非常簡單的指針操作,做題時注意考慮到邊界條件判斷即可。
實例化結果鏈表 result;
創(chuàng)建 3 個 Node 變量(代替指針)指向 被加數(shù)鏈表 的第二個節(jié)點(因為頭節(jié)點在實例化 result 時已經操作過)以及 result 鏈表 的頭節(jié)點;
循環(huán)鏈表直至最長的鏈表遍歷結束以及進制為 0;
在循環(huán)內將節(jié)點值相加并操作 Node 變量指向下一個節(jié)點即可;
注:
為了加快算法速度,取整時我放棄了 parseInt,轉而使用位運算 ~~
另一種思路是先創(chuàng)建一個空頭節(jié)點作為 result 鏈表 的頭節(jié)點,所有相加的操作都放在循環(huán)中,最后返回 result.next 即可。這種方法可以 AC ,但由于多了一個空節(jié)點,在內存和性能上都稍差。
我的實現(xiàn):
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
const count = l1.val + l2.val
let carry = ~~(count / 10)
const result = new ListNode(count % 10)
let currentNode1 = l1.next
let currentNode2 = l2.next
let currentNode3 = result
while (currentNode1 || currentNode2 || carry) {
let digit = carry
if (currentNode1 && currentNode2) {
digit += currentNode2.val + currentNode1.val
currentNode1 = currentNode1.next
currentNode2 = currentNode2.next
} else if (currentNode1) {
digit += currentNode1.val
currentNode1 = currentNode1.next
} else if (currentNode2) {
digit += currentNode2.val
currentNode2 = currentNode2.next
}
carry = ~~(digit / 10)
currentNode3 = currentNode3.next = new ListNode(digit % 10)
}
return result
};
成績
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/105313.html
摘要:給定表,存在函數(shù),對任意給定的關鍵字值,代入函數(shù)后若能得到包含該關鍵字的記錄在表中的地址,則稱表為哈希表,函數(shù)為哈希函數(shù)。而中的對象就是基于哈希表結構,所以我們構造一個對象即可,是當前遍歷到的值,是其與目標值的差。 大部分玩前端的小伙伴,在算法上都相對要薄弱些,畢竟調樣式、調兼容就夠掉頭發(fā)的了,哪還有多余的頭發(fā)再去折騰。 確實在前端中需要使用到算法的地方是比較少,但若要往高級方向發(fā)展,...
摘要:更新之前說感覺優(yōu)秀答案的最后三行可以用尾遞歸優(yōu)化不知道尾遞歸的小伙伴可以點這里,仔細想了一下,并不能。尾遞歸的實現(xiàn),往往需要改寫遞歸函數(shù),確保最后一步只調用自身。 上周日就想寫vue.nextTick的源碼分析,可是總是不知道從哪兒下手,今天有時間,先把leetcode第二題補了,感覺這道題還挺簡單的 一、題目 兩數(shù)相加: 給出兩個 非空 的鏈表用來表示兩個非負的整數(shù)。其中,它們各自...
摘要:這題是說給出兩個鏈表每個鏈表代表一個多位整數(shù)個位在前比如代表著求這兩個鏈表代表的整數(shù)之和同樣以倒序的鏈表表示難度這個題目就是模擬人手算加法的過程需要記錄進位每次把對應位置兩個節(jié)點如果一個走到頭了就只算其中一個的值加上進位值 Add Two Numbers You are given two linked lists representing two non-negative num...
摘要:給出兩個非空的鏈表用來表示兩個非負的整數(shù)。如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和。需要考慮到兩個鏈表長度不同時遍歷方式鏈表遍歷完成時最后一位是否需要進一位。 ?給出兩個 非空 的鏈表用來表示兩個非負的整數(shù)。其中,它們各自的位數(shù)是按照 逆序 的方式存儲的,并且它們的每個節(jié)點只能存儲 一位 數(shù)字。如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和。 ...
摘要:給出兩個非空的鏈表用來表示兩個非負的整數(shù)。如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和。需要考慮到兩個鏈表長度不同時遍歷方式鏈表遍歷完成時最后一位是否需要進一位。 ?給出兩個 非空 的鏈表用來表示兩個非負的整數(shù)。其中,它們各自的位數(shù)是按照 逆序 的方式存儲的,并且它們的每個節(jié)點只能存儲 一位 數(shù)字。如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和。 ...
閱讀 2656·2021-10-09 09:44
閱讀 2309·2021-10-08 10:05
閱讀 3615·2021-07-26 23:38
閱讀 3250·2019-08-28 18:16
閱讀 948·2019-08-26 11:55
閱讀 1985·2019-08-23 18:29
閱讀 2192·2019-08-23 18:05
閱讀 1486·2019-08-23 17:02