You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

反转链表代码出现nil指针解引用运行时错误原因咨询

问题分析与解决

1. nil指针解引用panic的原因

当输入链表为空(head == nil)时,代码会直接执行for head.Next != nil的条件判断——对nil指针访问Next字段,直接触发invalid memory address or nil pointer dereference的panic。就算输入是[1,2,3,4,5],你的循环逻辑也会导致后续出现指针访问异常。

2. 循环逻辑错误,无法完成链表反转

Go的并行赋值是先计算所有右值,再统一赋值给左值,这会让你的循环提前断开链表,无法按预期执行4次:
比如第一次循环时:

  • 初始状态:head指向节点1,prev为nil
  • 计算右值:head.Next是节点2,prev是nil,head是节点1
  • 赋值后:head变成节点2,head.Next被设为nil(原prev的值),prev变成节点1
    此时节点2的Next已经是nil,下一次循环条件head.Next != nil不成立,循环直接终止,根本处理不到节点3、4、5。

修正后的代码

func reverseList(head *ListNode) *ListNode {
    var prev *ListNode
    current := head
    for current != nil {
        nextTemp := current.Next // 先保存下一个节点,避免链表断开
        current.Next = prev      // 反转当前节点的指针
        prev = current           // prev 移动到当前节点
        current = nextTemp       // current 移动到下一个节点
    }
    return prev
}

修正逻辑说明

  • 用current变量遍历链表,避免直接修改原head导致指针混乱
  • 循环条件改为current != nil,既兼容空链表的情况,也能遍历到最后一个节点
  • 先保存下一个节点,再依次反转指针、移动指针,确保链表不会提前断开

内容的提问来源于stack exchange,提问作者Tho Do

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:10:15