牛客网BM11 链表相加(二)

本文讨论了如何在处理链表表示的整数相加时避免溢出问题,指出直接转换链表到整型并相加会有溢出风险,分享了解决方案并提示了考虑链表长度和数据类型的必要性。
摘要由CSDN通过智能技术生成

牛客网BM11

问题描述:

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。

给定两个这种链表,请生成代表两个整数相加值的结果链表。

看到这个问题,首先想到的是暴力解:

1、将链表1和链表2的值用整型来存储

2、然后加起来之后,放到链表3中

我相信这是大家都想到的方法,但是这种方法是有问题的。我的代码如下,debug上图的例子也没问题。

class Solution {
  public:
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        ListNode* reversedHead1 = head1;
        ListNode* reversedHead2 = head2;
        long long num1 = 0;
        long long num2 = 0;
        while (reversedHead1) {
            num1 = num1 * 10 + reversedHead1->val;
            reversedHead1 = reversedHead1->next;
        }
        while (reversedHead2) {
            num2 = num2 * 10 + reversedHead2->val;
            reversedHead2 = reversedHead2->next;
        }
        long long sum = num1 + num2;

        ListNode* head3 = nullptr;
        if (sum == 0) {
            head3 = new ListNode(0);
            return head3;
        }

        while (sum != 0) {
            auto* tempNode = new ListNode(sum % 10);
            if (!tempNode) { // 检查内存分配是否成功
                // 处理内存分配失败的情况,这里简单地返回空指针
                return nullptr;
            }
            tempNode->next = head3; // 将新节点的下一个节点指向 head3
            head3 = tempNode; // 更新 head3 指向新节点
            sum /= 10;
        }

        return head3;
    }
};

没有通过

看到输出有负值估计是溢出的问题,百度了一下:出现了一个逻辑错误,导致输出结果不正确。问题出在循环计算链表代表的整数时,没有考虑到链表的长度可能超出了 long long 类型能表示的范围。在这种情况下,对 long long 类型进行相加可能会导致溢出,进而导致结果不正确。

还是不能偷懒用这种简便的方法。还是看答案吧!谢谢看这篇文章,小白一个,有任何见解欢迎留言。

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值