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

輸入:l1 =?[2,4,3], l2 =?[5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:
輸入:l1 =?[0], l2 =?[0]
輸出:[0]
示例 3:
輸入:l1 =?[9,9,9,9,9,9,9], l2 =?[9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
提示:
每個(gè)鏈表中的節(jié)點(diǎn)數(shù)在范圍?[1,?100]?內(nèi)
0?<=?Node.val?<=?9
題目數(shù)據(jù)保證列表表示的數(shù)字不含前導(dǎo)零
思路:
首先取出“+”左右兩邊兩個(gè)數(shù)的最低位; 其次求出他們的和并作為輸出結(jié)果的最低位; 考慮優(yōu)化:我們都知道的第一點(diǎn)是加法運(yùn)算是有進(jìn)位的,所以使用 carry 來(lái)保存進(jìn)位的結(jié)果; 臨界值判斷:當(dāng)兩個(gè)鏈表長(zhǎng)度不一樣的時(shí)候,總會(huì)有 有值 和 null 相加的情況,所以需要處理下; 用一個(gè)額外變量保存頭鏈表,用于返回結(jié)果;
題解:
/**
?*?Definition?for?singly-linked?list.
?*?function?ListNode(val,?next)?{
?*?????this.val?=?(val===undefined???0?:?val)
?*?????this.next?=?(next===undefined???null?:?next)
?*?}
?*/
/**
?*?@param?{ListNode}?l1
?*?@param?{ListNode}?l2
?*?
?*?@return?{ListNode}
?*/
var?addTwoNumbers?=?function(l1,?l2)?{
????let?sum?=?new?ListNode('0'),?
????????head?=?sum,
????????carry?=?0;
????while?(carry?||?l1?||?l2)?{
????????let?val1?=?l1???l1.val?:?0
????????let?val2?=?l2???l2.val?:?0
????????let?r1?=?val1?+?val2?+?carry
????????carry?=?r1?>=?10???1?:?0
????????sum.next?=?new?ListNode(r1?%?10)
????????sum?=?sum.next
????????if?(l1)?l1?=?l1.next
????????if?(l2)?l2?=?l2.next
????}
????return?head.next
};
評(píng)論
圖片
表情
