我正在尝试使用链接列表重载添加并且已经碰壁了。我将2个链接列表添加到一起,每个节点单独添加,但如果我添加两个包含999和999的列表,那么它显示181818而不是正确的答案,我有点丢失。它似乎有时会工作,就像我使用500和500一样。
LinkedList LinkedList::operator+( LinkedList &obj)
{
LinkedList sum;
ListNode *nodePtr;
ListNode *nodePtr2;
nodePtr = head;
nodePtr2 = obj.head;
while (nodePtr && nodePtr2)
{
sum.appendNode(nodePtr->value + nodePtr2->value);//append node adds a new node containing the value at the end of the list.
nodePtr = nodePtr->next;
nodePtr2 = nodePtr2->next;
}
return sum;
}
答案 0 :(得分:0)
从您的代码和帖子中,似乎每个链接列表都是数字的数字列表。您试图通过添加两个链接列表的匹配列表项来添加两个数字。但至少在两种情况下,这种情况会很快失败:
是的它适用于500 + 500 - 这并不违反我上面提到的两种情况中的任何一种。
因此,我将您的while
循环更改为以下内容:
int carryVal = 0;
while (...) {
...
int sum = nodePtr->value + nodePtr2->value;
int thisDigitVal = sum % 10 + carryVal; // First digit of the sum, plus any carry from previous digit
sum.appendNode(thisDigitVal);
carryVal = sum / 10; // carry for next digit (division by int will truncate -- thats what we want)
...
}
几个笔记:
while
条件以使用不同长度的数字,并处理任何最终进位。int thisDigitVal = sum % 10 + carryVal;
返回值>的情况。 9然后在下一个数字的进位中添加另外1个。