【发布时间】:2019-10-28 04:55:24
【问题描述】:
练习要求我获得两个列表的乘积,前提是节点的总和与列表中的位置相比处于多个位置。因此,如果 ((l1->d + l2->d) % pos == 0)) 为真,则构建一个新列表。我做了我的尝试,但我不明白为什么它是错误的。我错过了什么?
Nodo *prodotto_pos(Nodo *l1, Nodo *l2, int pos)
{
Nodo *p;
if ((l1 == NULL) && (l2 == NULL)) return NULL;
else if ((l1 != NULL) && (l2 != NULL))
{
if (((l1->d + l2->d) % pos) == 0)
{
p = newnode();
p->d = ((l1->d) * (l2->d));
p->next = prodotto_pos(l1->next, l2->next, pos+1);
}
}
return p;
}
例子:
L1: 3->4->2->7->5->6->11->16->7->2->NULL
L2: 0->2->2->6->2->12->2->NULL
输出:0->8->72->NULL
【问题讨论】:
-
您有可能返回未初始化的
p。将初始条件更改为if (l1 == NULL || l2 == NULL)。那么你就不需要else if。但即便如此,p仍有可能保持未初始化状态。 -
您的
else if错误。您之前正在执行退货,因此您可以简单地写if。 -
好的,但是还是不行
标签: c list recursion singly-linked-list