c语言中的Linkedlist递归反转

c语言中的Linkedlist递归反转,c,recursion,C,Recursion,这个问题已经讨论过了 假设我们不先用两个指针,然后简单地写 if(*head_ref->next==NULL) { p=*head->ref; return; } recursive(&head_ref->next); p->next-next=p; p->next=NULL; 这不管用,我知道不应该,但我不明白为什么 首先,如果我们通过*head\u ref,是否有任何问题?它确实改变了头部,但是当我们在递归中时,它会引起任何问题吗?在递

这个问题已经讨论过了

假设我们不先用两个指针,然后简单地写

if(*head_ref->next==NULL)
{
    p=*head->ref;
    return;
}
recursive(&head_ref->next);
p->next-next=p;
p->next=NULL;
这不管用,我知道不应该,但我不明白为什么

首先,如果我们通过
*head\u 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:
}

请用
struct Node*头缩进代码(参见编辑)
*head\u ref->next
错了。@crashmstr我知道它“错了,但为什么?它在非结构或联合的情况下为成员next发出错误请求。似乎通过递归返回时,
p->next=NULL
赋值正在破坏下一个需要进一步访问的引用。尝试将该语句取出。@Stack因为该代码中没有
p
,并且它使用
node
而不是
node
,所以您应该发布一个完整的示例来说明您正在做什么。