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,肯定报错了。

相关推荐
@小博的博客7 分钟前
C++初阶学习第十三弹——容器适配器和优先级队列的概念
开发语言·数据结构·c++·学习
尘浮生11 分钟前
Java项目实战II基于SpringBoot的共享单车管理系统开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序
2401_8574396916 分钟前
社团管理新工具:SpringBoot框架
java·spring boot·后端
ThetaarSofVenice27 分钟前
Java从入门到放弃 之 泛型
java·开发语言
嘟嘟Listing35 分钟前
jenkins docker记录
java·运维·jenkins
WHabcwu41 分钟前
统⼀异常处理
java·开发语言
zaim142 分钟前
计算机的错误计算(一百六十三)
java·c++·python·matlab·错数·等价算式
枫叶丹442 分钟前
【在Linux世界中追寻伟大的One Piece】多线程(一)
java·linux·运维
2401_8543910843 分钟前
Spring Boot OA:企业数字化转型的利器
java·spring boot·后端
Mr__vantasy44 分钟前
数据结构(初阶6)---二叉树(遍历——递归的艺术)(详解)
c语言·开发语言·数据结构·算法·leetcode