C、 列表的最后一个元素不指向任何内容



我有一个问题:如果指针列表相等,下面的函数会将指针列表复制到第二个链接列表中。FXlist1=1 2 3 3 5 6 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);
        }
}

我知道这是一个无用的功能,它是用于学校考试的

问题在于:我完成了一项学校作业,因为没有包含"if(lis->next==NULL)return NULL;"由于在读取列表的最后一个节点时,函数将不起任何作用:fx如果lis是1 1 3 4

对于第一个节点,lis->next!=NULL,他找到1==1`所以在lis 2中复制对于第二个,lis->next!=NULL,和1!=3,所以rec调用,但没有副本然而,自3以来的第三个!=4,它什么都不做

问题是,只要我在递归调用之后分配lis->next,第二个列表的最后一个复制节点基本上会指向一个什么都不做的函数。

显然,我的老师对这个问题很严厉,因为有很多简单的方法可以解决它。然而,我的问题是:为什么它会起作用?

试着把它写下来并编译,工作起来很有魅力:/

如果它对你有效,那就意味着你很幸运,当条件满足时,eax寄存器恰好为零。就好像在函数的末尾有一个return NULL

当我在编译器中测试这一点时,情况并非如此,代码也不起作用。对我来说,eax寄存器包含lis的值,所以就好像函数末尾有return lis一样。这产生了一个永远循环的列表。

相关内容

  • 没有找到相关文章

最新更新