链表-反装链表

解题思路:

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

相关推荐
菜鸟233号2 小时前
力扣669 修剪二叉搜索树 java实现
java·数据结构·算法·leetcode
SadSunset3 小时前
力扣题目142. 环形链表 II的解法分享,附图解
算法·leetcode·链表
jingfeng5145 小时前
哈希表的概念+实现
数据结构·哈希算法·散列表
ホロHoro5 小时前
数据结构非线性部分(1)
java·数据结构·算法
沉下去,苦磨练!6 小时前
实现二维数组反转
java·数据结构·算法
玖剹6 小时前
哈希表相关题目
数据结构·c++·算法·leetcode·哈希算法·散列表
红豆诗人6 小时前
数据结构初阶知识--单链表
c语言·数据结构
L_09076 小时前
【C++】高阶数据结构 -- 二叉搜索树(BST)
数据结构·c++
仰泳的熊猫7 小时前
1150 Travelling Salesman Problem
数据结构·c++·算法·pat考试
lixzest8 小时前
C++中经常用的头文件介绍
数据结构·c++·算法