`
java-mans
  • 浏览: 11813674 次
文章分类
社区版块
存档分类
最新评论

《算法之美》の链表问题の记住头元素+删除元素

 
阅读更多

记住头元素:

单向链表的头元素必须至始至终要记住,否则链表将会在内存中丢失。这意味着在链表第一个元素之前插入新元素或删除链表第一个元素时,指向链表头的指针或引用必须更新。

C/C++中,很容易因误用指针而犯错误,如下面代码,它在链表的前面插入一个元素:

bool insertInFront(IntElement *head, int data)

{

IntElement *newItem = new IntElement;

if(!newItem)

return false;

newItem->data = data;

newItem->next = head->next;

head = newItem; //错误

return true;

}

上面的代码是不正确的,因为它只更新了头指针的“本地拷贝”。正确的版本是传入一个头元素指针的指针:

bool insertInFront(IntElement **head, int data)

{

IntElement *newItem = new IntElement;

if(!newItem)

return false;

newItem->data = data;

newItem->next = head->next;

*head = newItem; //正确啦

return true;

}

当然,在C++中,头指针也可以通过引用来传递。

删除单个元素:

bool deleteElement(IntElement **head, IntElement *deleteMe)

{

IntElement *elem = *head;

if(deleteMe == *head) //要删除的是头元素

{

*head = elem->next;

delete deleteMe;

return true;

}

while(elem)

{

if(elem->next == deleteMe)

{

elem->next = deleteMe->next;

delete deleMe;

return true;

}

elem = elem->next;

}

return false;

}

删除链表中的所有元素:

void deleteList(IntElement **head)

{

IntElement *deleteMe = *head;

while(deleteMe)

{

IntElement *next = deleteMe->next;

delete deleteMe;

deleteMe = next;

}

*head = NULL;

}

分享到:
评论

相关推荐

    数据库实验 包含九个实验 有多种排序算法 链表的插入删除翻转等

    此外,还可能涉及链表的翻转,这是一种常见的算法问题,通过改变节点之间的链接顺序来实现链表的反转。 其次,排序算法是计算机科学中的另一个核心主题。实验中提到了多种排序算法,例如冒泡排序、选择排序、插入...

    王争哥数据结构与算法之美.zip

    这个名为“王争哥数据结构与算法之美”的压缩包文件显然包含了丰富的学习资源,旨在帮助大学生深入理解和掌握这一关键领域。 首先,我们要理解什么是数据结构。在计算机科学中,数据结构是指组织、存储和管理数据的...

    数据结构双向链表交集并集

    接下来,我们需要实现双向链表的基本操作,如插入、删除和遍历,以便构建和操作集合。这里不详细展开,但这些是实现交集和并集的基础。 然后,我们可以设计算法来求集合的交集。基本思路是遍历一个集合,检查每个...

    链表的c++实现 包含完整的过程代码 Vc环境下

    记住,理解链表的基本概念和操作对于学习更复杂的数据结构和算法至关重要。链表是许多高级数据结构(如树、图)的基础,也是许多高效算法的核心。熟悉链表的C++实现将增强你在软件开发领域的技能。

    linux下双向循环链表实用例子

    在Linux系统中,数据结构是实现内核功能和系统服务的核心元素之一,而双向循环链表就是其中一种常用且强大的工具。本篇文章将深入探讨如何在Linux环境下利用双向循环链表进行基本操作,如初始化、添加元素、删除元素...

    易语言算法入门(3)删除运算

    删除运算在编程中通常指的是从数据结构(如数组、列表、链表等)中移除特定元素的过程。在易语言中,我们可以使用不同的方法来实现这一操作,具体取决于我们处理的数据类型和结构。下面,我们将详细讨论几种常见的...

    数据结构之双向链表(完整版)

    创建双向链表通常包括初始化头节点、插入新节点、删除节点、遍历链表等操作。插入节点时,你需要更新插入点前一个节点的next指针和插入点后一个节点的prev指针。删除节点时,需要同时调整被删除节点的前驱和后继节点...

    数据结构与算法PPT

    数据结构与算法是计算机科学的基础,它探讨了如何有效地存储和处理数据,以及设计和分析解决问题的算法。在本课程中,我们将深入学习这些概念,包括数据结构的...记住,数据结构的选择和算法的设计是解决问题的关键。

    易语言算法入门3删除运算

    删除链表中的元素涉及修改前后节点的连接,这通常需要通过循环遍历链表来实现。 6. **数据结构的通用方法**:易语言提供了一些通用的方法,如`对象删除`,可以用于具有自定义删除逻辑的对象或类。 7. **错误处理**...

    《数据结构与算法》常见问题解答

    ### 数据结构与算法常见问题解答 #### 一、教材信息 1. **教材出版信息**: - 本书由张铭编写,详细介绍了数据结构与算法的基础知识及应用技巧,适用于计算机科学及相关专业的本科生和研究生。 2. **每位作者...

    数据结构(链表操作)

    链表的头节点通常指向链表的第一个元素,而尾节点的指针域通常为NULL,表示链表的结束。 在本程序中,实现了链表的以下基本操作: 1. **链表的创建**:首先,我们需要创建一个空链表。这通常涉及定义一个头节点,...

    算法与数据结构常见问题

    ### 算法与数据结构常见问题解析 #### 一、教材信息 1. **教材出版信息**:《数据结构与算法》是一本系统介绍数据结构与算法的基础教材,适用于计算机科学及相关专业的本科生和研究生。 2. **每位作者负责的章节*...

    链表的建立,删除与插入

    链表操作是数据结构和算法学习的基础,理解这些基本操作对于解决更复杂的问题至关重要。通过实践和模拟,你可以更好地掌握链表的工作原理,并能够灵活地在各种场景中应用它们。记住,链表虽然提供了比数组更高的灵活...

    算法数据结构常见面试题

    在IT行业中,数据结构与算法是核心技术之一,对于求职者来说,掌握它们是必不可少的技能。本资料包“算法数据结构常见面试题”是为准备面试的程序员精心准备的,涵盖了这一领域的核心知识点,旨在帮助你提升面试成功...

    数据结构算法演示

    2. **链表**:演示单链表和双链表的插入、删除和遍历操作,解释头节点和尾节点的作用。 3. **栈**:通过实例展示栈的压入、弹出操作,以及在表达式求值、括号匹配等问题中的应用。 4. **队列**:说明队列的入队、...

    数据结构与算法常见问题解答

    - **关于算法**:算法是一系列解决问题的步骤集合,其设计和分析是数据结构与算法课程的核心内容之一。 - **怎样写抽象数据类型ADT?**:抽象数据类型(ADT)是一种封装了数据和操作的数据结构类型。定义ADT时,首先...

    数据结构算法参考

    总结来说,理解和掌握线性表的概念以及相关算法是理解数据结构的基础,这对于解决各种实际问题,如数据库索引、动态规划等问题至关重要。在实际编程中,根据具体场景选择合适的数据结构和算法,可以显著提高程序的...

    数据结构C++算法

    在`ListNode.h`中,通常会定义一个表示链表节点的结构体或类,而在`SingleList.h`中,我们会实现链表的头节点和相关操作,如插入、删除和遍历。测试代码`test.cpp`用于检查链表操作的正确性。 接着,我们转向“算法...

    数据结构算法学习学习.zip

    链表则允许动态地添加或删除元素,但访问速度相对较慢;栈和队列分别遵循“后进先出”(LIFO)和“先进先出”(FIFO)原则,常用于处理任务调度和缓冲区管理;树结构则用于表示层次关系和进行查找操作;图用于表示...

    数据结构与算法知识总结

    学习数据结构和算法并不是为了记住所有结构和具体实现,而是要掌握其核心思想,灵活应用到实际问题中。随着技术的发展,新的数据结构和优化算法不断出现,因此持续学习和理解其原理至关重要。通过深入理解数据结构和...

Global site tag (gtag.js) - Google Analytics