翻转链表的递归实现

  翻转链表的循环实现很简单,但是递归实现想了很久也没有想到,看了下网上帖子才恍然大悟,基本原理就是利用递归到最后一个节点,然后反递归的方向,利用链表的性质(可以找到当前节点之后的任何节点的位置),把当前节点的指针赋给原链表后一个指针的Next指针。本质上利用的还是链表和递归的基本性质。

//递归方式
Node * reverseList(List head)
{
    //如果链表为空或者链表中只有一个元素
    if(head == NULL || head->next == NULL)
    {
        return head;
    }
    else
    {
        //先反转后面的链表,走到链表的末端结点
        Node *newhead = reverseList(head->next);
        //再将当前节点设置为后面节点的后续节点
        head->next->next = head;
        head->next = NULL;
        
        return newhead;
    }
}

 

posted @ 2017-11-09 16:11  fupeirui  阅读(181)  评论(0编辑  收藏  举报