【发布时间】:2013-07-18 23:45:45
【问题描述】:
我有一个问题:如果指针列表相等,则以下函数会在第二个中复制指针列表。 外汇 list1 = 1 2 3 3 5 6 7 7 7
调用后的结果是:
list2 = 3 7
node *seqdup(node *lis)
{
if(lis == NULL)
return NULL;
else if (lis->next != NULL)
{
if(lis->data == lis->next->data)
{
node *p;
p = newnode();
p->data = lis->next->data;
p->next = seqdup(lis->next);
return p;
}
else
return seqdup(lis->next);
}
}
我知道这是一个没用的功能,它是用于学校考试的。
它的问题是: 我为学校作业做的,在 10 分中总共得到 2 分,因为不包括诸如“if (lis->next == NULL) return NULL;”之类的条件。 由于在读取列表的最后一个节点时,该函数什么也不做: fx if the lis is 1 1 3 4
对于第一个节点,lis->next != NULL 他发现 1 == 1` 所以复制到 lis 2 对于第二个,lis->next != NULL,和 1 != 3,所以 rec 调用,但没有副本 然而,第三个,因为 3 != 4,它什么也不做
问题是,只要我在递归调用之后分配 lis->next,第二个列表的最后一个复制节点基本上会指向一个什么都不做的函数。
显然,我的老师对这个问题的严厉态度是正确的,因为有很多简单的方法可以解决它。然而,我的问题是:为什么它仍然有效?
试图把它写下来并编译它,就像一个魅力:/
【问题讨论】:
-
澄清一下:你问的是“我的函数为什么会在通过没有明确
return的代码路径时返回NULL?” -
类似的东西是的。运行该函数后,我使用打印函数遍历返回的列表(只要 lis != NULL 打印数据字段),一切正常。
标签: c list pointers recursion linked-list