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

LeetCode 19题:删除链表倒数第N个节点代码报错求助

问题分析:LeetCode 19. 删除链表的倒数第N个节点

给定链表的head,删除链表的倒数第n个节点并返回其头节点。

示例1

示例图
输入:head = [1,2,3,4,5],n = 2
输出:[1,2,3,5]

以下是你编写的代码:

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        int count = 0;
        while (head->next!=NULL){
            head = head -> next ;
            count++;
        }
        int len;
        len = count - n ;
        ListNode* curr = head; 
        for(int i =len ; i > 0 ; i--){
            curr = curr->next;
        }
        curr->next = curr->next->next;
        return head;
    }
};

你遇到的错误:

Line 23: Char 26: runtime error: member access within null pointer of type 'ListNode' (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:32:26


代码中的问题点

  1. 原头节点丢失:开头的while循环直接修改了传入的head指针,循环结束后head指向链表尾节点,既无法再遍历回链表前端,最后返回的也不是原链表的头节点,完全偏离需求。
  2. 链表长度计算错误:while循环只统计了head->next不为空的次数,实际链表长度应该是count + 1(没算头节点本身),导致后续len = count - n的计算结果完全错误,无法定位到正确的前驱节点。
  3. 空指针访问必然触发:
    • curr初始指向尾节点,尾节点的next本身就是空,后续循环里curr = curr->next会让curr变成空指针,再访问curr->next直接触发空指针异常。
    • 如果要删除的是头节点(比如链表长度为1、n=1的情况),代码里的head->next就是空,第一步循环就会触发错误。
  4. 删除逻辑完全错误:从尾节点出发往前移动的逻辑不成立,因为单向链表无法反向遍历,你只能从前往后找目标节点的前驱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:35:22