双链表C++删除元素
Doubly linked list C++ Delete element
我在删除链表的第一个和最后一个元素时遇到问题。当我试图删除第一个元素时,我的代码什么也不做(当我打印列表时,删除的元素仍然存在)。当我试图删除最后一个时,控制台显示核心转储。
这是我的代码:
void Delete_element(point del, node *elem) {
struct node *temp = elem;
if(elem->p.x==del.x && elem->p.y == del.y) {
elem=elem->next;
return;
} else {
while(elem->next->next!=NULL) {
if(elem->next->p.x==del.x && elem->next->p.y==del.y) {
temp=elem->next;
elem->next=elem->next->next;
elem->prev=temp->prev;
return;
}
temp=temp->next;
}
}
if(elem->next->p.x==del.x && elem->next->p.y==del.y) {
elem->next=NULL;
}
}
编辑:修复后
void Delete_element(point del, node *& elem){
struct node *temp = elem;
if(elem->p.x==del.x && elem->p.y == del.y){
temp = elem->next;
free(elem);
elem=temp;
return;
}else{
while(elem->next->next!=NULL)
{
if(elem->next->p.x==del.x && elem->next->p.y==del.y)
{
temp=elem->next;
elem->next=elem->next->next;
elem->next->prev=elem;
return;
}
elem=elem->next;
}}
if(elem->next->p.x==del.x && elem->next->p.y==del.y){
elem->next=NULL;
return;
}
}
现在移除一个中间元素就被破坏了。
请帮助
首先,您实际上并没有删除任何内容。然而,您留下了悬空指针,这会导致内存泄漏。在每种情况下,你都应该删除一些内容。这就是为什么您仍然可以看到数据,而不是垃圾或某种崩溃。
第二,你看起来有一个无限循环。当你打while循环时,你永远不会改变elem,所以elem->next->next永远不会改变。
第三,为什么要删除while循环中的elem->next?删除elem以避免混淆。
编辑:
你不能那样改变elem。把elem想象成一个整数或你传递的浮点值。如果你想让elem保持头部的变化,你就必须传递一个指向elem的指针,它最终成为一个指向指针的指针。
我相信你至少有两个错误:
为了修改第一个元素,您必须在打算修改第一个指针时传递对该指针的引用。用途:
void Delete_element(point del, node *& elem)
从中间移除一个元素似乎已损坏。而不是:
elem->prev=temp->prev
你应该有:
elem->next->prev=element
相关文章:
- C++如何通过用户输入删除列表元素
- 使用函数"remove"删除重复元素
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除列表中的第n个元素
- 从矢量中删除元素后出现隔离错误
- 删除映射和分割错误中的一个过去结束元素
- 如何使用remove_if从矢量中删除元素
- 如何从使用 for 循环中的矢量大小的矢量中删除元素
- 从矢量中删除空元素
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- 删除指针数组 (C++) 中的元素
- 删除列表 c++ 中的最后 3 个元素
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 从std::multiset的第i个元素删除到末尾
- 删除 [] 是否等于每个元素删除.C++
- std::列出元素删除后节点的内存回收