链表-反装链表

解题思路:

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

相关推荐
郝学胜-神的一滴5 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
不知名XL10 小时前
day50 单调栈
数据结构·算法·leetcode
cpp_250112 小时前
P10570 [JRKSJ R8] 网球
数据结构·c++·算法·题解
cpp_250112 小时前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
TracyCoder12313 小时前
LeetCode Hot100(26/100)——24. 两两交换链表中的节点
leetcode·链表
季明洵13 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
only-qi13 小时前
leetcode19. 删除链表的倒数第N个节点
数据结构·链表
cpp_250113 小时前
P9586 「MXOI Round 2」游戏
数据结构·c++·算法·题解·洛谷
浅念-13 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
爱吃生蚝的于勒13 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习