【发布时间】:2012-11-01 23:40:19
【问题描述】:
我正在尝试编写一个对整数求和的函数,每个整数都由一个链表表示,其中每个节点->数据是一个数字 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;
}
首先,这段代码是否正确?它似乎有效,但是当给定两个不同长度的链表(整数)时,它会出现故障。我想知道这个问题是否只是为了解决整数长度相同的情况。如果不是,我将如何将两个不同长度的列表相加?我天真的解决方案是存储每个列表的长度,然后使用它来创建只有一个数字会贡献的数字,直到两个整数对齐。还有比这更优雅的吗?
【问题讨论】:
标签: c++ linked-list