【发布时间】:2021-05-09 04:27:28
【问题描述】:
我在做 LeetCode 问题 2 添加两个数字。说明是:
给定两个非空链表,代表两个非负数 整数。这些数字以相反的顺序存储,并且它们的每个 节点包含一个数字。将两个数字相加并返回总和 作为一个链表。
您可以假设这两个数字不包含任何前导零,除了 数字 0 本身。
例子:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807。
注意两个链表的长度可以不同
我的想法是将 l1 和 l2 中的每个数字相加,称为 v3。将其修改 10 (v3%10) 以找出我需要插入新链表的数字。并将其除以 10 以确定我是否需要遇到进位。但是,我的解决方案没有返回任何东西,我不知道为什么......
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *dummy = NULL;
int v3 = 0;
int carry = 0;
while (l1 && l2 && v3 > 0){
int v1 = l1->val;
int v2 = l2->val;
// when l1 reaches the end. Set v1 to 0
if(l1->next == NULL){
v1 = 0;
}
if(l2->next == NULL){
v2 = 0;
}
v3 = (v1 + v2 + carry);
carry = v3 / 10;
int insert_value = v3 % 10;
ListNode *newNode = new ListNode(insert_value);
if(dummy == NULL){
dummy = newNode;
} else {
ListNode *head = dummy;
while (dummy->next){
dummy = dummy->next;
dummy->next = newNode;
dummy = head;
}
}
if(l1->next != NULL){
l1 = l1->next;
}
if(l2->next != NULL){
l2 = l2->next;
}
}
return dummy;
}
};
【问题讨论】:
-
您是否使用调试器单步调试过您的代码?
-
v3最初为 0,因此v3 > 0不成立,循环永远不会运行。 -
循环条件应该是
while( l1 || l2 || carry )而不是and -
@StephenNewell 我试着这样做。但是 LeetCode 并没有提示我一个常规的控制台来单步执行代码。
-
@Slava 谢谢。我刚刚修好了。现在我陷入了一个无限循环,感觉第二个while循环没有break条件
标签: c++ data-structures linked-list