翻转链表的递归实现

在这里插入图片描述

  • 考虑翻转链表的递归实现
  • 递归算法实现通常使用整体的思想,而不去人为的考虑具体的细节
  • 例如本题实现的翻转链表函数,我们考虑该函数的本身的功能—输入头结点,翻转该链表,并将新的头结点返回
  • 因此该题具体实现如下
  • 先考虑边界情况,当链表是空或者一个节点时,直接返回即可
  • 当实现最后一步时,类似DP的考虑方式,调用reverseList(head->next)即可翻转以head->next为开头的链表,并且得到他的头结点,如1->2->3->4->5,调用完reverse函数即变成1->2<-3<-4<-5并且得到新的头结点5,也就是我们最后需要的头结点,此时1->next指向2只需要将1->next->next指向1,再让1指向空节点即可
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        
        if(!head || !head->next)return head;
        
        auto newhead = reverseList (head->next);
        
        head->next->next=head;
        
        head->next=NULL;
        
        return newhead;
    }
};


posted @ 2020-05-27 22:47  zzcxxoo  阅读(217)  评论(0)    收藏  举报