解题思路
这道题就是将两个数用链表表示然后将这两个数相加,方法很简单粗暴,直接加就可以了。但是这里有一点要注意,就是这两个数的位数可能不一样,即这两个链表的长度可能不一样,所以我们需要做好创建新节点的准备。
代码
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* iter1 = l1;
ListNode* iter2 = l2;
ListNode *temp = NULL, *result = NULL;
int v1, v2;
int carryBit = 0;
int tempVal = 0;
while (iter1 != NULL || iter2 != NULL) {
v1 = iter1 ? iter1->val : 0;
v2 = iter2 ? iter2->val : 0;
int sum = v1 + v2 + carryBit;
tempVal = sum % 10;
carryBit = sum / 10;
// 判断是否是第一个数据
if (result == NULL) {
result = temp = new ListNode(tempVal);
} else {
temp->next = new ListNode(tempVal);
temp = temp->next;
}
iter1 = iter1 ? iter1->next : iter1;
iter2 = iter2 ? iter2->next : iter2;
}
//最后一个是否存在进位判断
if (carryBit != 0) {
temp->next = new ListNode(carryBit);
}
return result;
}
复杂度
O(n): 简单地遍历两条链
本文介绍了一种使用链表表示数字并进行加法运算的方法。通过遍历两个链表,逐位相加,并处理进位,最终形成新的链表作为结果。文章详细解释了算法流程,包括如何处理不同长度的链表以及最后的进位情况。
——Add Two Numbers Medium&spm=1001.2101.3001.5002&articleId=83317845&d=1&t=3&u=8180219a1f354f1db45f8fbb111312d2)
190

被折叠的 条评论
为什么被折叠?



