链接列表的SIGABRT错误
SIGABRT error for linked list
我创建了一个链表,我的目标是删除链表中重复的数据。每个节点中只有一个数据和指针组件。该算法可能并不完美,但我担心的是,为什么在尝试删除节点时,Xcode中会出现错误SIGABRT
。当if
条件为true时,代码中会出现错误。不知道SIGABRT
是什么意思。
void LinkedList::deleteRepetition(const LinkedList& list)
{
node* temp_value = nullptr;
node* traverser = nullptr;
temp_value = head;
traverser = head;
for (int i = 0; i < NODES; i++)
{
for (int j = 0; j < NODES - i; j++)
{
traverser = temp_value->next;
if (traverser->data == temp_value->data)
{
delete traverser;
}
}
traverser = temp_value;
temp_value = temp_value->next;
}
}
第二个循环将再次迭代已移除的元素。当您找到相同的节点时,也需要交换指针。右侧版本:
void LinkedList::deleteRepetition(const LinkedList& list)
{
node* node1 = head;
node* node2 = nullptr;
node* duplicate = nullptr;
while(node1 != nullptr && node1->next != nullptr)
{
node2 = node1;
while(node2->next != nullptr)
{
if(node1->data == node2->next->data)
{
duplicate = node2->next;
node2->next = node2->next->next;
delete duplicate
}
else
{
node2 = node2->next;
}
}
node1 = node1->next;
}
}
请注意,最后一个元素中的next
必须为NULL。
这里您的方法是错误的。循环内部,迭代后再次访问相同的内存并损坏。所以你需要在循环内部更新它。
我的方法也是一样,可能会对你有所帮助
void removeDuplicates(struct node *start)
{
struct node *ptr1, *ptr2, *dup;
ptr1 = start;
/* Pick elements one by one */
while(ptr1 != NULL && ptr1->next != NULL)
{
ptr2 = ptr1;
/* Compare the picked element with rest of the elements */
while(ptr2->next != NULL)
{
/* If duplicate then delete it */
if(ptr1->data == ptr2->next->data)
{
/* sequence of steps is important here */
dup = ptr2->next;
ptr2->next = ptr2->next->next;
free(dup);
}
else /* This is tricky */
{
ptr2 = ptr2->next;
}
}
ptr1 = ptr1->next;
}
}
使用while循环,我试图节省检查某些条件的时间,我们可以忽略
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 为什么我在此代码中收到 SIGABRT 错误
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- 当我的代码工作正常时,为什么在SPOJ中遇到运行时(Sigabrt)错误
- CPP中的Sigabrt错误
- 在数组中移动元素 SIGABRT 错误
- 由于 getline(cin,s) 导致的 SIGABRT 错误
- 在Hepsort程序中获取Sigabrt错误
- SIGABRT 运行时何时出现错误以及如何在这种情况下进行调试
- 链接列表的SIGABRT错误
- 矢量和双克初始化或push_back会导致 SIGABRT 错误
- C++中的SIGABRT错误
- 用GDB中更有意义的错误描述替换SIGABRT
- CudaMalloc抛出sigabrt错误