zoukankan      html  css  js  c++  java
  • 递归反转链表(通俗详解)

    递归反转链表

    先上代码,然后一步步分析。

    1 ListNode* reverseList(ListNode* head) {
    2     if(head==NULL || head->next==NULL) 
    3         return head;
    4     ListNode *newHead=reverseList(head->next);
    5     head->next->next=head;
    6     head->next=NULL;
    7     return newHead;
    8 }

    1.我们先考虑两个结点。

    刚进入递归函数时(此时是第一层递归),走到 ListNode *newHead=reverseList(head->next)代码处,head->next(图中编号为2的结点)作为头结点进入下一层递归循环(第二层递归),注意:head结点在这一层循环中(第二层递归)是二号结点,执行代码,判断递归条件,二号结点的下一个结点为空所以第二层递归函数返回,newHead等于返回的二号结点。此时函数返回到第一层递归中,继续向下执行代码。由于递归返回此时head结点是二号结点。

    执行 head->next->next=head 代码后,因为head->next指针是二号结点,二号结点的next指针指向了head。
    然后head->next=NULL。然后链表反转成功返回newHead,将尾结点作为新的头结点。
    
    

    2.分析多个结点情况如此,递归函数先递归进行到最后一个结点,然后逐层递归返回。并修改指向的指针。

    
    

    注意:执行递归时候不要跳进递归(每层递归入栈不易理解),而是根据函数的定义来弄清楚函数执行后产生什么结果。reverseList(head->next) 执行完成后,整个链表就成了这样:

    然后执行 head->next->next=head 和head->next=NULLL 下面两个代码反转链表。

    参考链接:https://zhuanlan.zhihu.com/p/86745433?utm_source=ZHShareTargetIDMore

    
    
    
    
    
    
     
  • 相关阅读:
    Life -1b The secrets of long life? Teacher: GABRIELE
    Life -1a How well do you sleep? Teacher: GABRIELE
    Kubernetes(K8s) 学习笔记 updating...
    English trip EM3-PE1B Teacher:Taylor
    V3 -A Hard Bargain Teacher: GABRIELE
    802.11k/v/r WiFi无缝漫游
    V3 -Who Am I? Teacher: GABRIELE
    Dell OMSA(updating...)
    (转)红蓝对抗之Windows内网渗透
    WiFi6(整理网上资料进行汇总查看,相关内容摘取与互联网)
  • 原文地址:https://www.cnblogs.com/mld-code-life/p/12705213.html
Copyright © 2011-2022 走看看