牛客网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
类型进行相加可能会导致溢出,进而导致结果不正确。
还是不能偷懒用这种简便的方法。还是看答案吧!谢谢看这篇文章,小白一个,有任何见解欢迎留言。