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


