題目概要
完成兩個鏈表的“加法”并返回存儲“和”的鏈表。
題目鏈接
解題思路
- 迭代兩個鏈表,逐位相加
- 相加過程中考慮進位
- 注意兩個鏈表不想等長度下,對長鏈表的處理
復雜度分析
時間復雜度:O(n)
空間復雜度:O(n)
代碼
/**
* 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) {
if(!l1 && !l2) return NULL;
if(!l1) return l2;
if(!l2) return l1;
int carry = 0;
ListNode *head = new ListNode(0), *pre = head, *cur = head, *p1 = l1, *p2 = l2;
head->val = p1->val + p2->val;
carry = head->val / 10;
head->val %= 10;
pre->next = new ListNode(0);
cur = pre->next;
p1 = p1->next;
p2 = p2->next;
while(p1 && p2) {
cur->val = carry + p1->val + p2->val;
carry = cur->val / 10;
cur->val %= 10;
cur->next = new ListNode(0);
pre = cur;
cur = pre->next;
p1 = p1->next;
p2 = p2->next;
}
while(p1) {
cur->val = carry + p1->val;
carry = cur->val / 10;
cur->val %= 10;
cur->next = new ListNode(0);
pre = cur;
cur = pre->next;
p1 = p1->next;
}
while(p2) {
cur->val = carry + p2->val;
carry = cur->val / 10;
cur->val %= 10;
cur->next = new ListNode(0);
pre = cur;
cur = pre->next;
p2 = p2->next;
}
cur->val = carry;
if(cur->val == 0) {
delete pre->next;
pre->next = NULL;
}
return head;
}
};
廣告區域
本人和小伙伴們承接各種軟件項目,有需求的可以聯系我們。
QQ: 2992073083