我必须编写一个双链接列表,我正在尝试实现erase(Type obj)
方法,该方法接受一个参数obj,遍历列表并删除包含元素obj的每个节点。
我面临的问题是,我从前面遍历链表,当我找到包含obj元素的节点时,我会在包含obj元素的节点前后更改节点的下一个/上一个指针。然而,我并没有删除带有obj本身的节点,据我所知,c没有垃圾收集,所以带有obj的节点仍然悬在空中。我如何删除它?
我的擦除()
template <typename Type>
int Double_list<Type>::erase( Type const &obj ) {
if (empty()){
return 0;
}
if (size() == 1 && head()->retrieve() == obj){
list_head = nullptr;
list_tail = nullptr;
list_size--;
return 1;
}
//Counter to hold the number of items deleted
int count = 0;
//Iterating through the linked list
for (Double_node<Type> *ptr = head(); ptr != nullptr; ptr = ptr->next()){
if (ptr->retrieve() == obj){
ptr->previous_node->next_node = ptr->next();
ptr->next()->previous_node = ptr->previous();
count++;
// delete ptr; // This stops me from iterating through the for loop
list_size--;
}
}
return count;
}
删除指针和对象时有一种称为delete的语法。示例代码:
obj *temp = getCurrentNode();
//set pointers in nodes to the correct places
delete temp; //This releases all of the memory used in the object back to the OS
temp = NULL;//good practice to set this to null, since it points to non-allocated memory
//but exiting the function will make the pointer 'temp' useless, anyway.
当你遍历你的列表时,你正在使用指向节点的指针,它的类型是Double_node
Double_node<Type> *ptr_next = 0;
for (Double_node<Type> *ptr = head(); ptr != nullptr; ptr = ptr_next) {
ptr_next = ptr->next ();
if (ptr->retrieve() == obj){
if (ptr->previous_node)
ptr->previous_node->next_node = ptr->next();
ptr->next()->previous_node = ptr->previous();
count++;
list_size--;
delete ptr;
}
我相信这应该能奏效。
本文向大家介绍C#双向链表LinkedList排序实现方法,包括了C#双向链表LinkedList排序实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#双向链表LinkedList排序实现方法。分享给大家供大家参考。具体如下: 1.函数 打印链表函数PrintLinkedList 和 排序函数SortLinkedList 注:下面代码中的链表每项都是double类型,如果换做其他
我写了下面的代码,但它在执行create()函数后停止工作。我想从头节点开始删除替代元素。我的delete_Alt()函数正确吗?请告诉我哪里错了。
本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。
主要内容:双向链表的创建目前我们所学到的 链表,无论是动态链表还是 静态链表,表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,通常称这类链表为 单向链表(或 单链表)。 虽然使用单链表能 100% 解决逻辑关系为 "一对一" 数据的存储问题,但在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 "从前往后"
双向链表 结构体 struct rt_list_node 双向链表节点 更多... 宏定义 #define rt_container_of(ptr, type, member) ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member))) 获取type结构体中member成员在这个结构体中的偏移 #de
双向链表 Linux 内核自己实现了双向链表,可以在 include/linux/list.h 找到定义。我们将会从双向链表数据结构开始内核的数据结构。为什么?因为它在内核里使用的很广泛,你只需要在 free-electrons.com 检索一下就知道了。 首先让我们看一下在 include/linux/types.h 里的主结构体: struct list_head { struct l