链表-反装链表

解题思路:

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.迭代法:

相关推荐
by2099919 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Code_Solitude19 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
Pniubi20 小时前
快速排序(力扣基础)(递归)
java·数据结构·算法
lojox1 天前
C++ 手写 STL list(双向循环链表)原理剖析与实现
c++·链表·list
inrichtt1 天前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger1 天前
数据结构——选择排序
数据结构·算法·排序算法
丑梨数据1 天前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓1 天前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
CS创新实验室2 天前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1012 天前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度