我正在尝试编写一个整数的函数,每个整数都由一个链表来表示,其中每个节点 - >数据都是数字0-9。最不重要的数字在列表的头部,最多的是在尾部。总结两个链接列表,其中每个节点是一个数字
这是来自Cracking the Coding Interview的书。这里是我的代码:
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;
}
首先,这段代码是否正确?它看起来可行,但当给定两个不同长度的链表(整数)时,它会出现故障。我想知道这个问题是否只是为了解决整数长度相同的情况。如果不是,我将如何总结两个不同长度的列表?我的天真的解决方案是存储每个列表的长度,然后使用它来创建只有一个数字将贡献的数字,直到两个整数对齐。有没有比这更优雅的东西?
不应它是如果(node1->下),并且如果(node2-> next)?? – ordinary
@常规否,因为'node1'或'node2'指向null,并且访问'node-> next'无效。 –
好的,是的。这是正确的答案。 – ordinary