給你兩個非空的鍊錶,表示兩個非負的整數。它們每位數字都是按照逆序的方式儲存的,並且每個節點只能儲存一位數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 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]
兩個非負整數,對其中的各數進行逆序相加並輸出。需要考慮以下幾個問題:(1)數值進製問題;(2)兩個鍊錶的長度不同。對於進製問題,當兩數相加大於10後,和模10的值為當前值,和除以10為進製值;對於長度不同的問題,假設短的鍊錶後面為零。同時,為了程式的執行,還編寫了建立鍊錶的函式用來初始化兩個非負整數的鍊錶。
源程式:
/*
問題:輸出l1和l2兩個鍊錶表示的非負整數的逆序和
*/#include
#include
using
namespace std;
//定義結構體
struct listnode
//初始化當前結點值為0,指標為空
listnode
(int x)
:val
(x),
next
(nullptr
)//初始化當前結點值為x,指標為空
listnode
(int x, listnode *next)
:val
(x),
next
(next)
//初始化當前結點值為x,指標指向下乙個結點};
//兩數之和的類方法
class
solution
else
carry = sum /10;
if(l1)
if(l2)}if
(carry >0)
return head;}}
;//建立鍊錶的函式
listnode*
createlinklist
(const vector<
int>
& v)
return head;
}int
main
(int argc,
char
*ar**)
);listnode *l2 =
createlinklist()
; listnode *l3;
solution s;
l3 = s.
addtwonumbers
(l1, l2)
;while
(l3)
cout << endl;
return0;
}
執行結果:
LeetCode2 兩數相加
嗯。今天兩個簡單題,我可能要墮落了 先貼第乙個 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807...
LeetCode 2 兩數相加
題目 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 解題 這題就比較簡單了,兩數相加處理好...
LeetCode 2 兩數相加
題目描述 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。題目思路 先從最低有效位也就是列表 l1 和 l2 的表頭開始相加。由於每位數字都應當處於 0 9 的範圍內,我們計算...