我的输出中有一个额外的 0,为什么会这样

My output have an extra 0 in it, why is that

本文关键字:为什么 输出 有一个 我的      更新时间:2023-10-16

所以我正在对leetcode进行练习,这就是问题:

您将获得两个非空链表,代表两个非负 整数。数字以相反的顺序存储,每个节点 包含一个数字。将两个数字相加并将其作为链表返回。

您可以假设这两个数字不包含任何前导零,除了 数字 0 本身。

例:

输入: (2 -> 4 ->3( + (5 -> 6 -> 4(

输出: 7 -> 0 -> 8

说明:342 + 465 = 807。

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/

这是我的解决方案:

class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
vector<int> V1;
vector<int> V2;
int sum1 = 0;
int sum2 = 0;
ListNode *result = new ListNode(0);
auto l0 = result;
while(l1) {
V1.push_back(l1->val);
l1=l1->next;
}
for (auto it1 = V1.rbegin(); it1 != V1.rend(); it1++) {
sum1 = sum1 * 10 + (*it1);
}
while(l2) {
V2.push_back(l2->val);
l2=l2->next;
}
for (auto it2 = V2.rbegin(); it2 != V2.rend(); it2++) {
sum2 = sum2 * 10 + (*it2);
}
int sum3 = sum1 + sum2;
while (sum3 !=0) {
int extract = sum3 % 10;
l0->next = new ListNode(extract);
sum3 /= 10;
l0=l0->next;
}
return result;

}
};

当我运行它时,我的输出中总是有额外的 0,例如:

您的意见 [7,2,7] [2,4,2]

你的答案 [0,9,6,9]

预期答案 [9,6,9]

我知道有一个更聪明的方法可以解决这个问题,但我想先尝试用我的方式解决它

这是因为您正在创建第一个具有 0 的节点。您有两种解决方案:

  • 跳过函数末尾的第一个元素(解决方法(:

    ListNode* aux = result;
    result = result->next;
    delete aux;
    return result;
    
  • 不将列表节点初始化为零,而是使用空指针:

s

ListNode *result = nullptr;
// More code...
while (sum3 !=0) {
int extract = sum3 % 10;
if (l0 == nullptr) {
result = new ListNode(extract);
l0 = result;
}
else
l0->next = new ListNode(extract);
sum3 /= 10;
l0=l0->next;
}

Ofc,有更好的解决方案。您可以直接进行求和,而无需使用额外的向量/内存。

您得到一个额外的零,因为您正在执行比要求多 1 次remainderdivision操作。 您必须在最后一个while循环下修改条件。

while (sum3 > 9) {
int extract = sum3 % 10;
l0->next = new ListNode(extract);
sum3 /= 10;
l0=l0->next;
}