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

相关推荐
Felven21 分钟前
B. Deja Vu
数据结构·算法
俊昭喜喜里21 分钟前
C#中的func<>
java·前端·c#
highreport26 分钟前
net报表工具对比:HighReport 与 FastReport
java·c#
不会就选b38 分钟前
算法日常・每日刷题--<贪心>3
数据结构·算法·leetcode
xiaoqiMikko39 分钟前
七条 advisory 各给了一个修复版,而一次修完的那个数字一条都没写
java·spring boot
vHelios39 分钟前
【电商项目】短信测试遇到的问题与解决方案:InaccessibleObjectException报错、单元测试通过但未接收到验证码
java·微服务
ysu_031439 分钟前
03-双链表与循环链表
c语言·数据结构·链表
气泡水好喝43 分钟前
Java魔法探秘:从Java代码到CPU指令,一个方法调用的完整生命周期
java
气泡水好喝1 小时前
读《阿里巴巴Java开发手册》五年,这7条规约救了我太多次
java
凯哥Java1 小时前
System.setProperty 的正确姿势:Spring Boot 启动类里的“缺省值“魔法
java·spring boot·后端