力扣基础题-两数相加
两数相加
题目描述
题目链接:https://leetcode-cn.com/problems/add-two-numbers/
难度:简单
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

解析:
本题可以看作模拟题,模拟的是加法的过程,由于题目中告知数字的顺序是从个位开始,因此只需要对位相加并处理好进位即可。
代码:
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
ListNode *res = new ListNode();
ListNode *tmp = res;
int a, b, cin = 0;
while (true) {
a = l1 == nullptr ? 0 : l1->val; // 取出加数 1 当前位的数字
l1 = l1 == nullptr ? nullptr : l1->next;
b = l2 == nullptr ? 0 : l2->val; // 取出加数 2 当前位的数字
l2 = l2 == nullptr ? nullptr : l2->next;
tmp->val = a + b + cin; // 计算当前位结果并处理进位
if (tmp->val > 9) {
cin = 1;
tmp->val -= 10;
} else {
cin = 0;
}
if (l1 == nullptr and l2 == nullptr and cin == 0) {
break;
}
tmp->next = new ListNode();
tmp = tmp->next;
}
return res;
}
};
总结
题目总体来说比较简单,并且没有什么大坑让你踩,只要逻辑正确基本上就能过

浙公网安备 33010602011771号