/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
//时间复杂度:O(max(m, n)), 空间o(max(m, n))(m, n为链表节点个数)
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if(!l1 && !l2) return nullptr;
if(!l1) return l2;
if(!l2) return l1;
ListNode* dummyHead = new ListNode(0);
ListNode *p = l1, *q = l2;
ListNode* curr = dummyHead; //如果不设置哑结点需要对链表头部的节点单独处理
int carry = 0; //进位
while(p || q) {
int x = p ? p->val : 0;
int y = q ? q->val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr->next = new ListNode(sum % 10);
curr = curr->next;
if(p) p = p->next;
if(q) q = q->next;
}
if(carry) curr->next = new ListNode(carry);
return dummyHead->next;
}
};
LeetCode2. 两数相加
最新推荐文章于 2023-11-13 07:45:00 发布