如何解决为什么它会给出 Segmentation Fault 错误,但仅针对某些代码运行或者我们可以说针对某些输入情况?
为什么它只显示 15 个测试用例中的 1 个测试用例的分段错误。 next 和 head 指针是可访问的,我什至没有更改任何不可编辑的指针。
错误 - 程序因信号 SIGSEGV 终止,分段错误。
#0 0x0000000000401364 在 compare_lists (head2=,head1=0x192f5b0) 在 Solution.cpp:70
line 70 while(temp->next != nullptr && temp2->next != nullptr){
bool compare_lists(SinglyLinkedListNode* head1,SinglyLinkedListNode* head2)
{
SinglyLinkedListNode* temp = head1;
SinglyLinkedListNode* temp2 = head2;
bool abc;
int i1 = 0;
int i2 = 0;
while (temp->next != nullptr && temp2->next != nullptr) {
if (temp->data == temp2->data && i1 == i2) {
++i1;
++i2;
abc = true;
temp = temp->next;
temp2 = temp2->next;
}
else {
abc = false;
temp = temp->next;
temp2 = temp2->next;
}
}
return abc;
}
解决方法
在将节点分配给它的 next
邻居之前,您应该检查它是否为空。
if (temp->next != nullptr)
temp = temp->next;
if (temp2->next != nullptr)
temp2 = temp2->next;
小更新:这似乎不是问题,我以为您在循环条件中检查 temp
和 temp2
自身是否为 null。在这种情况下,如果其中之一最初为空,您的代码将崩溃。即一个列表是空的。
如果任何输入列表的元素少于两个,则您的函数具有未定义的行为。
它在其他情况下的结果仅取决于列表的第 k:th 个元素,其中 k+1 是较短列表的长度。
您也不需要计算元素;如果您到达一个列表的末尾,但尚未到达另一个列表的末尾,则它们的长度不等。
请注意,当且仅当您到达两个列表的末尾而没有遇到不同的元素时,列表才相等。
更短的定义:
bool equal_lists(const SinglyLinkedListNode* head1,const SinglyLinkedListNode* head2)
{
while (head1 != nullptr && head2 != nullptr) {
if (head1->data != head2->data) {
break;
}
head1 = head1->next;
head2 = head2->next;
}
return head1 == nullptr && head2 == nullptr;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。