leetcode力扣刷题打卡
题目:445. 两数相加 II 剑指 Offer II 025. 链表中的两数相加
描述:给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
解题思路
1、反转两个链表再相加;
2、注意进位jinwei;
3、注意判断链表是否为空或者走到头了;
原代码##
class Solution {
public:
ListNode *reverseList(ListNode *head) {
if (head == nullptr || head->next == nullptr) return head;
ListNode *pre = nullptr;
ListNode *cur = head;
while (cur) {
ListNode *temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
return pre;
}
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *l11 = reverseList(l1);
ListNode *l12 = reverseList(l2);
ListNode *p = new ListNode(-1);
ListNode *ans = p;
int jinwei = 0;
while (l11 || l12) {
int num1 = l11 ? l11->val : 0;
int num2 = l12 ? l12->val : 0;
int sum = num1 + num2 + jinwei;
p->next = new ListNode(sum % 10);
jinwei = sum / 10;
if (l11) l11 = l11->next;
if (l12) l12 = l12->next;
p = p->next;
}
if (jinwei) p->next = new ListNode(jinwei);
return reverseList(ans->next);
}
};