【发布时间】:2021-06-21 05:08:23
【问题描述】:
我有一个这样的节点:
struct ListNode {
int val;
ListNode *next;
ListNode()
: val(0), next(nullptr) {}
ListNode(int x)
: val(x), next(nullptr) {}
ListNode(int x, ListNode *next)
: val(x), next(next) {}
};
我想使用递归对两个链接列表求和。我不确定,但我猜是尾递归。
输入: l1 = [2,4,3], l2 = [5,6,4]
输出: [7,0,8]
解释: 342 + 465 = 807。
这是我的代码:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2, int carry = 0,ListNode *result = nullptr) {
int n1 = l1 != nullptr ? l1->val : 0;
int n2 = l2 != nullptr ? l2->val : 0;
int val = (n1 + n2 + carry) % 10;
if(result == nullptr){
result = new ListNode(val);
}else{
result->next = new ListNode(val);
result = result->next;
}
result = addTwoNumbers(l1->next != nullptr ? l1->next : nullptr,
l2->next != nullptr ? l2->next : nullptr,
(n1 + n2 + carry) - 10,result);
return result;
}
但我遇到了分段错误,即使传递了两个单节点列表:
ListNode * a = new ListNode(1);
ListNode * b = new ListNode(2);
ListNode * c = addTwoNumbers(a, b);
std::cout << c->val << "\n";
我看不出有什么问题,它应该可以工作。我错过了什么?
【问题讨论】:
-
请发送minimal reproducible example。您的错误可能出在链表本身的构造中。另外,请添加您收到的确切运行时错误消息。
标签: c++ recursion linked-list runtime-error tail-recursion