🎈 作者:Linux猿
🎈 簡介:CSDN博客專家🏆,C/C++、面試、刷題、演算法盡管咨詢我,關注我,有問題私聊!
🎈 關注專欄:LeetCode面試必備100題 (優質好文持續更新中……)🚀
一、題目描述
給你兩個非空的鏈表,表示兩個非負的整數,它們每位數字都是按照逆序的方式存盤的,并且每個節點只能存盤 一位數字,
請你將兩個數相加,并以相同形式回傳一個表示和的鏈表,
你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭,
提示:
1. 每個鏈表中的節點數在范圍 [1, 100] 內
2. 0 <= Node.val <= 9
3. 題目資料保證串列表示的數字不含前導零,
二、測驗樣例
輸入:L1 = [2,4,3], L2 = [5,6,4]
輸出:[7,0,8]
L1 表示為整數為 342,L2 表示為整數為 465,故兩數相加為 342 + 465 = 807
三、解題思路
本題實質上求解兩個大整數相加問題,
兩個整數逆序存放在兩個鏈表中,那么,只需要對這兩個鏈表模擬兩個數的加法即可,特別要注意一點的是進位問題,一個是兩個數相加的時候進位,另一個是最后要判斷進位是否為 0,
計算程序可以使用如下圖理解:
四、代碼實作
class Solution {
public:
ListNode* addTwoNumbers(ListNode* L1, ListNode* L2) {
int base = 0;
ListNode *head = nullptr, *tail = nullptr;
while (L1 || L2 || base > 0) {
int n1 = L1 ? L1->val : 0; // L1的值
int n2 = L2 ? L2->val : 0; // L2的值
int sum = n1 + n2 + base; //相加和
if (!head) {
head = tail = new ListNode(sum % 10);
} else {
tail->next = new ListNode(sum % 10);
tail = tail->next;
}
base = sum / 10; //進位
L1 = L1 == nullptr ? nullptr : L1->next;
L2 = L2 == nullptr ? nullptr : L2->next;
}
return head;
}
};
五、題目鏈接
Add Two Numbers
🎈 歡迎小伙伴們點贊👍、收藏?、留言💬
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289279.html
標籤:其他
上一篇:你知道什么是 RPC 嗎?
