链表在c中递归反转

时间:2015-01-06 13:39:07

标签: c recursion

问题已经讨论过here

假设我们不是先使用最后两个指针而只是写

if(*head_ref->next==NULL)
{
    p=*head->ref;
    return;
}
recursive(&head_ref->next);
p->next-next=p;
p->next=NULL;

这不起作用,我知道它不应该,但不能理解为什么。

首先,如果我们通过*head_ref会有什么问题吗?它实际上确实改变了头部,但是当我们处于递归时,它是否会引起任何问题?另外我们应该在递归调用中作为参数传递什么?

正确的代码如下所示我只是尝试以不同的方式实现它,我知道它错了

struct Node *head;// Declared Global
void Reverse(struct Node *p)
{
    if(p->next==NULL)
    {
        head=p;
        return;
    }
    Reverse(p->next);
    p->next->next=p;
    p->next=NULL:
}

0 个答案:

没有答案