【发布时间】:2022-11-04 14:42:37
【问题描述】:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *p=head,*q=head,*t=NULL;
long long c=0;
while(p!=0){
c++;
p=p->next;
}
c=c-n;
while(q!=NULL && c>0){
t=q;
q=q->next;
c--;
}
t->next=q->next;
delete q;
return head;
}
};
Line 26: Char 12: runtime error: member access within null pointer of type 'ListNode' (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:35:12
不知道为什么我会出错,因为根据我的想法,目前 t 和 q 都不是 NULL 。所以,我不应该得到这个错误
【问题讨论】:
-
建议:不要写字母汤。给事物起描述性的名称。
-
考虑使用堆栈。当您遍历列表时,将指向每个项目的指针添加到堆栈中。然后你需要做的就是弹出
n次来找到你需要删除的节点。还值得确保一些混蛋不会给出比列表大的n。 -
在调试器中运行您的代码并输入导致失败的输入集。然后一步一步,直到你看到你不期望的东西。
-
在打开相同的消毒剂的情况下测试您的代码也是一个好主意。这意味着您需要一个启用了消毒剂的编译器,而在 Windows 上,这通常意味着 clang。
-
当您尝试从末尾删除第 0 个时会发生什么? godbolt.org/z/MEx7YrhMG
标签: c++ linked-list singly-linked-list