我正在尝试使用递归来反转链接列表,我使用下面的代码
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;
}
}
我找不到任何错误,但我仍然没有得到正确的输出。请帮忙。
答案 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);
}