链表-反装链表

解题思路:

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

相关推荐
睡一觉就好了。7 分钟前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
齐落山大勇12 分钟前
数据结构——单链表
数据结构
皮皮哎哟1 小时前
深入浅出双向链表与Linux内核链表 附数组链表核心区别解析
c语言·数据结构·内核链表·双向链表·循环链表·数组和链表的区别
wWYy.2 小时前
指针与引用区别
数据结构
历程里程碑2 小时前
Linux 17 程序地址空间
linux·运维·服务器·开发语言·数据结构·笔记·排序算法
-dzk-2 小时前
【代码随想录】LC 203.移除链表元素
c语言·数据结构·c++·算法·链表
齐落山大勇3 小时前
数据结构——栈与队列
数据结构
毅炼3 小时前
hot100打卡——day17
java·数据结构·算法·leetcode·深度优先
404未精通的狗3 小时前
(数据结构)二叉树(上)
数据结构
寄存器漫游者4 小时前
数据结构 C语言 顺序栈
java·c语言·数据结构