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

单链表回文判断代码触发空指针访问运行时错误求助

问题排查与修复:单链表回文判断的空指针错误

错误原因分析

  • 未初始化变量j:int j声明后未赋值,初始值为随机垃圾值。若输入链表为空,第一个while循环不会执行,j保持随机值,后续for循环会基于该值执行多次,导致temp变为NULL后仍访问temp->val,触发空指针异常。
  • 回文检查死循环:最后一个while (l<=r)循环未对l和r进行自增/自减操作,进入循环后会无限执行,无法完成完整的回文校验。
  • 边界情况缺失:空链表属于回文结构,未提前处理会导致后续逻辑出错。

修复后的代码

class Solution {
public:
    bool isPalindrome(ListNode* head) {
        // 处理空链表的边界情况
        if (head == nullptr) {
            return true;
        }
        
        struct ListNode *temp = head;
        int j = 0; // 初始化长度计数器
        vector<int> v;
        
        // 合并遍历:同时获取长度并存储节点值
        while(temp != nullptr){
            j++;
            v.push_back(temp->val);
            temp = temp->next;
        }
        
        int l = 0;
        int r = v.size() - 1;
        // 移动指针完成回文校验
        while (l <= r){
            if(v[l] != v[r]) {
                return false;
            }
            l++;
            r--;
        }
        return true;
    }
};

额外优化说明

  • 将获取链表长度和存储节点值的两次遍历合并为一次,减少链表遍历次数,提升执行效率。
  • 使用nullptr替代NULL,是C++11及以后版本更规范的空指针写法。
  • 显式处理空链表的边界情况,避免后续逻辑触发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:00:58