每日一解 leetcode简单题目,两数相加

两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

解答代码

没什么特别好说的题目,也就有两个代码方面的小问题而已。采用了两个小技巧进行应对。
例如如果直接返回指针answer,那么answer怎么初始化,链表结尾怎么做成null都会是问题,简单粗暴地返回answer->next,就避免了answer初始化的问题。
以及要注意,例如99 + 5 的情况下,答案是要进位变成104的,比两个加数长度都长,这点要注意考虑到,就没什么特别的了。

class Solution {
public:
	ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
		ListNode *answer = new ListNode(0);
		ListNode *curr = answer;
		int position = 0;
		while (l1 != NULL || l2 != NULL) {
			if (l1 == NULL) {
				curr->next = new ListNode((position + l2->val) % 10);
				position + l2->val > 9 ? position = 1 : position = 0;
				curr = curr->next;
				l2 = l2->next;
				continue;
			}
			if (l2 == NULL) {
				curr->next = new ListNode((position + l1->val) % 10);
				position + l1->val > 9 ? position = 1 : position = 0;
				curr = curr->next;
				l1 = l1->next;
				continue;
			}
			curr->next = new ListNode((position + l2->val + l1->val) % 10);
			position + l2->val + l1->val > 9 ? position = 1 : position = 0;
			curr = curr->next;
			l1 = l1->next;
			l2 = l2->next;
		}
		if (position) {
			curr->next = new ListNode(1);//这里解决最终的进位问题。
		}
		return answer->next;
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值