206.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

单链表  

        耗时:30H

 1.注意看注释 主要考察循环的理解

 2.注意链表是有链接的,如果没处理好链接则会丢失后续所有链表的指向

class Solution {
    public ListNode reverseList(ListNode head) {
        //反转链表需要逐个节点地改变指针方向

        //指向已反转部分的最后一个节点。
        ListNode pre = null;
        //暂存当前节点的下一个节点,以防止在反转指针后失去对后续节点的引用。
        ListNode tmp = null;
        //定义指针 指向当前正在处理的节点。
        ListNode cur = head;

        //注:tmp知识负责暂存当前处理的下一个节点
        while(cur != null){
            //tmp 先暂存后面所有指针,避免找不到
            tmp = cur.next;
            
            //交换指针
            cur.next = pre;

            //重置更新指针 
            pre = cur; // 将pre指向当前节点 |更新前驱节点为当前节点,准备下次循环。
            cur = tmp; // 将cur移动到下一个节点 |移动到下一个节点,继续遍历。
        }
        //返回逆序后的链表
        return pre;

    }
}

便于理解:

        我们以前都学过swap,交换两个变量的值(1.使用位运算 2.使用第三方变量),这个也可以这样理解不过是循环

    public ListNode reverseList(ListNode head) {
        //A
        ListNode pre = null;
        //空杯
        ListNode tmp = null;
        //(allB)
        ListNode cur = head;

        while(cur != null){
            //一个空水杯 装剩下所有的水(allB)
            tmp = cur.next;

            //allB空出来了就装要交换的A
            cur.next = pre;

            //A杯空了 把要交换的(allB)杯里面的水放A中
            pre = cur;

            //把tmp空出来 准备新杯子
            cur = tmp;
        }
        return pre;
    }

头插法虚拟头结点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瞎姬霸爱.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值