LeetCode206.反转链表(JAVA)

1.题目

2.思路

1.这里使用双指针法

如上图所示,定义current和pre两个指针,让cur.next 指向 pre 这样就实现了链表的反转。

但是cur.next指向了pre后,cur后的所有元素就访问不到了(链断了),所以就需要一个next指针来保存cur后的元素。

3.代码

java 复制代码
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        ListNode next = null;  //注意不要在这个地方赋值 ListNode next =cur.next;
        while (cur != null) {
        	//防止断链
            next = cur.next;  
            //反转链表
            cur.next = pre;
            //移动位置
            pre = cur;
            cur = next; 
        }
        return pre;
    }
}

4.我的错误

java 复制代码
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        ListNode next =cur.next;  //我在这个地方初始化了next
        while (cur != null) {
        	//反转
            cur.next = pre;
            //更新位置
            pre = cur;
            cur = next; 
            next =cur.next;
        }
        return pre;
    }
}

这是我写的第一版,最后会报一个空指针错误。错误代码出现在循环里的这一行代码中

复制代码
  next =cur.next;

这是因为当反转完最后一个节点的时候,要更新位置了,cur=next 让cur已经指向了null,这时候再

使用next=cur.next,也就相当于null.next,肯定报错了。

相关推荐
2501_9419820511 分钟前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
马猴烧酒.35 分钟前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
sino爱学习1 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
不知名XL2 小时前
day50 单调栈
数据结构·算法·leetcode
风生u2 小时前
activiti7 详解
java
岁岁种桃花儿2 小时前
SpringCloud从入门到上天:Nacos做微服务注册中心(二)
java·spring cloud·微服务
Word码2 小时前
[C++语法] 继承 (用法详解)
java·jvm·c++
TT哇2 小时前
【实习 】银行经理端两个核心功能的开发与修复(银行经理绑定逻辑修复和线下领取扫码功能开发)
java·vue.js
逝水如流年轻往返染尘2 小时前
Java中的数组
java
java1234_小锋2 小时前
Java高频面试题:BIO、NIO、AIO有什么区别?
java·面试·nio