gpt4 book ai didi

c++ - 我写了这个方法来删除链表的重复元素,但它显示段错误,为什么?

转载 作者:行者123 更新时间:2023-11-30 21:43:29 25 4
gpt4 key购买 nike

Node* RemoveDuplicates(Node *head)
{
if (head == NULL || head->next == NULL)
{
return head;
}
else
{
Node *ptr = head;
Node *tmp = head->next;
int a = ptr->data;
int b = tmp->data;
while (ptr->next != NULL)
{
if (a == b)
{
while (a == b)
{
ptr->next = tmp->next;
tmp = tmp->next;
}
}
else
{
ptr = ptr->next;
tmp = tmp->next;
}

}
return head;
}
}

GDB 输出:

GDB trace:
Reading symbols from solution...done.
[New LWP 11656]
Core was generated by `solution'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 RemoveDuplicates (head=0x150fd00)
at solution.cc:31
31 ptr->next=tmp->next;
#0 RemoveDuplicates (head=0x150fd00)
at solution.cc:31
#1 main () at solution.cc:80

我在 hackerrank 上编写了这段代码,它显示了以下输出,真的不明白为什么,请有人帮助我!

最佳答案

看看这段代码:

        if (a == b)
{
while (a == b)
{
ptr->next = tmp->next;
tmp = tmp->next;
}

a等于b时,您执行while (a == b)。由于您没有更改 while 正文中的 ab,因此会出现无限循环。

tmp 迟早会变成 NULL 并且你的程序会崩溃。

您可能想要更新循环内的ab。此外,您需要在执行 ptr->next = tmp->next

之前检查 NULL

关于c++ - 我写了这个方法来删除链表的重复元素,但它显示段错误,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43464612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com