LeetCode 2——兩數相加
1. 題目
2. 解答
迴圈遍歷兩個連結串列
-
若兩個連結串列都非空,將兩個連結串列結點的值和進位相加求出和以及新的進位
-
若其中一個連結串列為空,則將另一個連結串列結點的值和進位相加求出和以及新的進位
然後將每一位的和新增到新連結串列中。
如果有一個連結串列為空,且此時進位為 0,我們則只需要將非空連結串列後面的值複製到新連結串列即可,可以通過將非空連結串列的剩餘結點直接接在新連結串列後面來實現。
如果最後兩個連結串列同時為空,我們還要考慮此時是否有進位,若有進位,進位即為最後一位的和,然後,讓連結串列尾結點指向 NULL 即可。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = new ListNode(0); // 建立哨兵結點
ListNode *temp = head;
int carry = 0; // 保留進位
int sum = 0;
while(l1 || l2)
{
if (l1 && l2) // 兩個連結串列都非空
{
sum = l1->val + l2->val + carry;
l1 = l1->next;
l2 = l2->next;
}
else if (l1) // l2 連結串列為空,只對進位和 l1 元素求和
{
sum = l1->val + carry;
l1 = l1->next;
}
else // l1 連結串列為空,只對進位和 l2 元素求和
{
sum = l2->val + carry;
l2 = l2->next;
}
// 求出和以及進位,將和新增到新連結串列中
carry = sum >= 10 ? 1 : 0;
sum = sum % 10;
head->next = new ListNode(sum);
head = head->next;
if ( (l1 == NULL || l2 == NULL) && carry == 0 )
{
head->next = l1 ? l1 : l2; // 將非空連結串列剩餘結點接在新連結串列後面
return temp->next;
}
}
if (carry) // 若最後一位還有進位,進位即為最後一位的和
{
head->next = new ListNode(carry);
}
head->next->next = NULL;
return temp->next;
}
};
獲取更多精彩,請關注「seniusen」!
相關文章
- 【leetcode】【2、兩數相加】LeetCode
- 【LeetCode】2 兩數相加LeetCode
- LeetCode 2.兩數相加LeetCode
- leetcode 2. 兩數相加LeetCode
- LeetCode題集-2 - 兩數相加LeetCode
- LeetCode——兩數相加LeetCode
- Leetcode兩數相加LeetCode
- [LeetCode 刷題] 2. 兩數相加LeetCode
- LeetCode-兩數相加LeetCode
- 2. 兩數相加
- 【刷演算法】LeetCode.2-兩數相加演算法LeetCode
- LeetCode2: Add two numbers(兩數相加)LeetCode
- LeetCode 第二題兩數相加LeetCode
- 簡單演算法題:leetcode-2 兩數相加演算法LeetCode
- LeetCode-2. 兩數相加(連結串列+大數加法模擬)LeetCode
- leetcode之兩數相加解題思路LeetCode
- 從零打卡leetcode之day 2---兩數相加LeetCode
- Leetcode:2. 兩數相加(C++帶詳細註釋)LeetCodeC++
- leetcode 解題 2.兩數相加-python3 題解LeetCodePython
- 力扣題解2-兩數相加力扣
- [LeetCode] Add Two Numbers 兩個數字相加LeetCode
- 演算法--力扣2. 兩數相加演算法力扣
- 演算法-兩數相加演算法
- Q30 LeetCode454 四數相加2LeetCode
- 演算法5: LeetCode_單連結串列_兩數相加演算法LeetCode
- LeetCode高頻演算法面試題 - 002 - 兩數相加LeetCode演算法面試題
- 程式設計題-兩數相加程式設計
- JavaScript兩數相加(踩坑)記錄JavaScript
- 題目:2.兩數相加 解題思路及Java實現Java
- leetcode 兩數相加(add two numbers) Python程式設計實現LeetCodePython程式設計
- 神奇補0解決連結串列相加:LeeCode002兩數相加
- LeetCode:兩數之和LeetCode
- LeetCode - 兩數之和LeetCode
- Fifth. LeetCode 2:Add Two Numbers 兩數之和LeetCode
- 讓我們一起啃演算法----兩數相加演算法
- LeetCode 29——兩數相除LeetCode
- LeetCode 1 兩數之和LeetCode
- leetcode #1 兩數之和LeetCode