递归地反转链表

时间:2014-06-03 14:29:27

标签: c linked-list

我正在尝试使用递归来反转链接列表,我使用下面的代码

struct node* reverse_list(struct node *head)
    {
        struct node *temp=head,*rhead,*first;
        if (temp->next== NULL)
            return temp;
        else
        {
            first = head;
            rhead = reverse_list(temp->next);
            first->next = NULL;
            rhead->next = first;
            return rhead;
        }
    }

我找不到任何错误,但我仍然没有得到正确的输出。请帮忙。

2 个答案:

答案 0 :(得分:0)

我认为这条线对我不太适合

     rhead->next = first;

在我看来它应该遍历到rhead列表的末尾,tail指向first

答案 1 :(得分:0)

您需要2个连续的节点才能递归执行:

struct node* reverse_list(struct node *head)
    {
       return reverse_list_prev(null, head);
    }

struct node* reverse_list_prev(struct node *prev, struct node *current)
    {
        if(null==current)
            return prev;
        struct node *tmp = current->next;
        current->next = prev;
        return reverse_list_prev(current, tmp);
    }