为什么我的列表没有在进位后添加最后一个节点?

问题描述 投票:0回答:1

我目前正在尝试回答 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]

我前后检查过,新节点确实存在,但是当我运行代码时它没有被添加到我的列表中。

c++ list pointers
1个回答
0
投票

目前,您正在创建新节点,但未将其添加到列表中。

由于它需要位于列表的末尾,因此您需要知道列表的当前末尾,以便可以将项目添加到其中。

您可以:

  • 从 l1 的原始开头(您已保存在

    ans
    中)开始并通过
    next

    向前循环,找到列表的末尾
  • 或者,当您已经在现有循环中循环

    l1
    时,请跟踪
    l1
    列表中的最后一个节点(例如,将
    l1
    保存在
    l1 = l1->next
    行之前的另一个变量中)

© www.soinside.com 2019 - 2024. All rights reserved.