gpt4 book ai didi

C++ 循环链表 : remove element

转载 作者:行者123 更新时间:2023-11-30 00:35:39 25 4
gpt4 key购买 nike

我已完成插入,在循环链表中搜索,但对于删除,我遇到了编译器错误...

以下是我的节点结构。

 struct node
{
int p_data;
struct node* p_next;

node(node* head, int data)
{
p_next = head;
p_data = data;
}

explicit node(int data)
{
p_next = nullptr;
p_data = data;
}
};




node* remove_circular(node* head, node* target)
{
if (head == target->p_next)
{
delete head;
return nullptr;
}

auto next_pointer = target->p_next;
target->p_data = next_pointer->p_data;
target->p_next = next_pointer->p_next;

delete target->p_next;
return target;
}

在主函数中调用

 head = remove_circular(head, head);
head = remove_circular(head, temp);

这是删除 head 元素和 temp 指向的另一个元素。但是我收到错误

有人知道从循环列表中删除一个元素吗??

我将其更改为删除 target->p_next;但现在它删除了列表中的所有内容。有什么想法吗???

最佳答案

循环链表是这样工作的:


linked list example


每个节点指向行中的下一个节点,列表的尾部指向头节点。这就是循环链表常规链表的区别(在上面的例子中,37 指向终止符)。

如果您的列表只有一个对象,那么它应该看起来像这样:


only node situation


因此,如您所见,任何地方都没有指向 null 的对象,但它发生在您使用 explicit 构造函数的代码上(如果我编写,它将运行节点 n = 节点(12))。

我建议你看看this link更好地了解您的算法应该是什么样子。

关于C++ 循环链表 : remove element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18364601/

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