gpt4 book ai didi

c++ - 求和每个节点是一个数字的两个链表

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:21 25 4
gpt4 key购买 nike

我正在尝试编写一个对整数求和的函数,每个整数都由一个链表表示,其中每个节点->数据都是数字 0-9。最低有效位在列表的头部,最高有效位在列表的尾部。

这出自《破解编程面试》一书。这是我的代码:

SinglyLinked<int>& addLists(SinglyLinked<int>& ll1, SinglyLinked<int>& ll2)
{
SinglyLinked<int> *sumList = new SinglyLinked<int>;

ListNode<int> *node1 = ll1.head; ListNode<int> *node2 = ll2.head;

int sum, carry = 0;
while(node1 || node2)
{
if(node1)
sum += node1->data;
if(node2)
sum += node2->data;
sum += carry;

carry = 0;
sumList->insertAtEnd(sum%10);
if(sum > 9)
carry = 1;
sum = 0;
node1 = node1->next; node2 = node2->next;
}
return *sumList;
}

首先,这段代码是否正确?它似乎有效,但是当给定两个不同长度的链表(整数)时它会出现错误。我想知道这个问题是否只是为了解决整数长度相同的情况。如果不是,我将如何总结两个不同长度的列表?我天真的解决方案是存储每个列表的长度,然后使用它来创建只有一个数字会贡献的数字,直到两个整数对齐。还有比这更优雅的东西吗?

最佳答案

它在不同长度的列表上发生段错误,因为 node1node2 指向 null。

改变

node1 = node1->next; node2 = node2->next;

if (node1)
node1 = node1->next;

if (node2)
node2 = node2->next;

关于c++ - 求和每个节点是一个数字的两个链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com