链表-反装链表

解题思路:

1.递归法:

比如说我的链表是1 ->2->3->4->5->null;

  1. 首先递归结束条件,找到最后一个元素:head.next==null;
  2. 添加递归调用:reverseList(head.next);
  3. 在递归调用之前的代码,都是在"递"的过程,其实就是每次都会在执行;
  4. 最后找到最后一个元素,就会开始"回溯":
    1. 比如说我到了"5"的位置,当前函数就会return "5"节点,到达"4"的函数体中;
    2. 开始执行4的函数体,要注意"4"函数的中的head表示的是"4"
    3. 在"4"函数中会执行:
      1. head.next.next = head;(head.next表示5,表示5的下一个元素指向4)

      2. head.next = null;(因为原链表是4->5->null,所以需要让4 的指向断开)

java 复制代码
public ListNode reverseList(ListNode head) {
        /**
        递归算法:
            1.
                首先是判断链表是否为null,是直接返回;
                判断是否只有一个元素,是 直接返回;
            2.
                递归调用找到最后一个元素,
                比如说:1,2,3,4,5
                    第1层回溯:直到5时,因为head.next =null;方法执行结束返回5;
                    2层回溯:4的方法体中,head=4,temp=5;
                        原链表是4->5->null;
                        然后执行head.next.next =head;表示5的下一个元素指向4;
                        但是原本中会有4->5,避免循环,所以head.next=null;

                    
                然后就是"归",从到前一次执行:
                    当前节点
         */
        if(head == null || head.next==null){
            return head;
        }
       ListNode temp =   reverseList(head.next);
       head.next.next = head;
       head.next = null;
       return temp;
    }

2.迭代法:

相关推荐
JAVA面经实录91710 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
影视飓风TIM12 小时前
数据结构 | 链表超全笔记(单链表+双链表+高频算法题)
数据结构·笔记·链表
牛油果子哥q12 小时前
STL set与map底层精讲,红黑树适配原理、有序去重特性、迭代器遍历、API实战与面试核心考点全解
开发语言·数据结构·c++·面试
一切皆是因缘际会14 小时前
LLM轻量化联邦微调机理
数据结构·人工智能·数学建模·ai
玖玥拾15 小时前
C/C++ 数据结构(六)链表迭代器与底层
c语言·数据结构·c++·链表·stl库
牛油果子哥q15 小时前
AVL平衡树与红黑树深度精讲对比,平衡因子、四大旋转原理、着色规则、平衡策略、性能差异与面试手撕全解
数据结构·c++·面试
Irissgwe16 小时前
map/set/multimap/multiset 的底层逻辑与实现
数据结构·c++·算法·二叉树·stl·c·红黑树
IronMurphy16 小时前
【算法五十八】23. 合并 K 个升序链表
数据结构·算法·链表
noipp17 小时前
【无标题】
c语言·数据结构·c++·算法
郝学胜-神的一滴18 小时前
完全二叉树与堆底层原理深度剖析 | 手写C++大顶堆实现
java·开发语言·数据结构·c++·python·算法