我目前正在尝试回答 leetcode 中的添加两个数字的问题,我的解决方案似乎按我的预期运行,但是在需要我的最终进位 int 的情况下,它不会添加到最终 if 语句中列表的末尾。
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int carry = 0;
ListNode* ans = l1;
while(l1 || l2){
if(l1 == nullptr) l1 = new ListNode();
if(l1 == nullptr && l2){
l1 -> val = (l2 -> val + carry) % 10;
carry = (carry + l2 -> val) / 10;
l2 = l2 -> next;
}else if(l2 == nullptr && l1){
int tempL1Val = l1 -> val;
l1 -> val = (l1 -> val + carry) % 10;
carry = (carry + tempL1Val) / 10;
}else{
int tempL1Val = l1 -> val;
l1 -> val = (l1 -> val + l2 -> val + carry) % 10;
carry = (tempL1Val + l2 -> val + carry) / 10;
l2 = l2 -> next;
}
l1 = l1 -> next;
}
if(carry){
l1 = new ListNode();
l1 -> val = carry;
}
return ans;
}
};
失败的测试用例:
l1 = [9,9,9,9,9,9,9]
l2 = [9,9,9,9]
output = [8,9,9,9,0,0,0]
expected_output = [8,9,9,9,0,0,0,1]
我前后检查过,新节点确实存在,但是当我运行代码时它没有被添加到我的列表中。
目前,您正在创建新节点,但未将其添加到列表中。
由于它需要位于列表的末尾,因此您需要知道列表的当前末尾,以便可以将项目添加到其中。
您可以:
从 l1 的原始开头(您已保存在
ans
中)开始并通过 next
向前循环,找到列表的末尾
或者,当您已经在现有循环中循环
l1
时,请跟踪 l1
列表中的最后一个节点(例如,将 l1
保存在 l1 = l1->next
行之前的另一个变量中)