`

链表操作总结

 
阅读更多

单个链表:

        a.判断是否有环:快慢法(p1=p2=head,p1=p1.next,p2=p2.next.next)

        b.环的第一个节点:假设p1,p2在环内的某点p相遇,则p1从p点继续遍历,p2从头节点开始遍历,两者相等的第一个点即为所求(证明略)
        c.反向输出链表:利用递归。(printNode(p.next);print(p))



两个链表(均无环):

a.是否相交:各自遍历至最后一个节点,若最后一个节点相等,则相交

b.相交的第一个点:

solution1 人工构环。将B链表的表尾和A链表的表头相连,转化为求单个有环链表的第一个节点

solution2 在执行a操作时候,记录两个链表的长度len1和len2(假设len1>=len2),则p1先遍历(len1-len2)个结点,然后p2也开始遍历,两者相遇(相等)的第一个节点为所求


两个链表(均有环):

a.是否相交:将A链表的环断开,若B链表从有环变成无环,则相交

b.相交的第一个点:

solution1 将A链表的环断开,变成两个无环链表求相交的第一个点(相交的第一个点与环入口点可能不是同一个点,求环入口点就按单个有环链表求入口点一样)

solution2 找出各自的环入口,如果相等,则相交


图中包含了链表的几种情况



可参考以下链接:


http://eriol.iteye.com/blog/1184348

http://blog.csdn.net/walkinginthewind/article/details/7074022



  • 大小: 25.6 KB
0
0
分享到:
评论

相关推荐

    C语言中链表的操作,总结到位!

    4. **头节点**:头节点的数据类型与首节点相同,但并不存放有效数据,主要用于简化链表操作。 5. **头指针**:指向头节点的指针。 6. **尾指针**:指向尾节点的指针。 #### 三、节点的定义 为了定义链表中的节点,...

    操作单链表的函数 学习链表操作

    ### 操作单链表的函数:学习链表操作 #### 一、理解单链表结构 单链表是一种常见的线性数据结构,其中每个元素(通常称为节点)包含两个部分:存储实际数据的数据字段和指向下一个节点的指针。这种结构使得链表...

    java链表 个人总结

    这使得链表在插入和删除操作上具有较高的效率,因为它们只需要改变节点间的引用关系,而不需要像数组那样移动大量元素。 Java中提供了两种内置的链表实现:LinkedList和ArrayList。ArrayList基于动态数组,适合随机...

    单向链表功能实现的源代码

    4. **链表操作总结**: - 创建链表可以使用头插法或尾插法,选择哪种方法取决于具体需求。 - 删除链表中的节点时,需要先找到待删除节点的前一个节点,然后更新前一节点的`next`域,使其指向待删除节点的下一个...

    链表操作链表的基本操作

    创建链表是链表操作的基础。在文件"1.cpp"中,`creatlist`函数用于创建链表。用户输入数据,函数通过不断分配新的节点并连接到链表中,直到用户输入0表示结束。最后,链表的头指针`l`被更新为新创建的链表头部。 ...

    实验二:链表的基本操作的实验报告

    通过这个实验,学生能够深入理解链表的存储结构,掌握链表操作的实现,并提升问题解决和程序设计的能力。同时,实验还强调了独立完成和分析程序的重要性,这有助于培养学生的自主学习和思考能力。

    链表题目总结1

    此外,还有其他解题策略,如使用哈希表、栈等数据结构来优化链表操作。例如: - 在寻找环形链表的交点时,可以使用哈希表记录节点,当发现节点已存在则表明有环。 - 在判断链表是否相交时,可以用栈存储两个链表的...

    c++链表的基本操作

    除了上述基本操作,还有许多高级的链表操作,如反转链表、合并两个已排序链表等。这些操作都需要深入理解和熟练掌握指针的使用。 总结来说,C++中的链表是通过指针链接的数据结构,提供了一种灵活的方式存储和操作...

    万能链表(总结)

    通过上述介绍,我们可以看到链表作为一种灵活的数据结构,能够支持多种操作,包括但不限于节点的增删改查等。在实际编程过程中,合理利用这些函数可以极大地提高程序的效率和可维护性。希望本文能帮助读者更好地理解...

    链表面试题目总结 全

    然而,如果要求在O(1)的时间复杂度内完成插入,可以考虑在链表的头部进行操作,即每次新插入的节点成为链表的第一个节点。 判断链表是否有环是另一个常见的问题。可以通过快慢指针的方法来解决,即同时使用两个指针...

    c++ 文件读取,链表操作例子

    总结起来,C++中的文件读取与链表操作是程序设计中常用的技术。理解如何正确使用`fstream`进行文件操作,以及如何创建和管理链表,对于开发复杂的数据处理和文件处理应用程序至关重要。通过实践和熟练掌握这些技能,...

    链表操作验证

    ### 链表操作验证知识点解析 #### 一、链表基础概念 链表是一种常见的线性数据结构,与数组不同的是,链表中的元素在内存中不是连续存放的,而是通过指针来连接在一起。每个元素(节点)包含两部分:数据域和指针域...

    数据结构 链表的操作 win32 VS

    在Windows环境下,使用Visual Studio(VS)进行编程时,理解并掌握链表操作是必要的技能。下面我们将深入探讨链表的基本概念、操作以及如何在VS中实现。 一、链表基础 1. 定义:链表是由一系列节点组成的数据结构...

    一、静态链表的定义 二、静态链表的设计 三、静态链表的操作 总结 附录 前言 你认识静态链表吗?听起来是不是很陌

    三、静态链表的操作 总结 附录 前言 你认识静态链表吗?听起来是不是很陌生呢?本文将较为详细的向你介绍它,感兴趣的话就一起来看看吧。 一、静态链表的定义 逻辑结构上相邻的数据元素,存储在指定的一块内存...

    C语言-链表基本操作源码

    本教程将深入探讨C语言中链表的基本操作。 一、链表的定义与结构 在C语言中,链表由一系列节点组成,每个节点包含两部分:数据域(用于存储数据)和指针域(指向下一个节点)。节点通常用结构体来定义,例如: ```...

    双循环链表操作

    本文将深入探讨双循环链表的构建、删除、插入等操作,并简要介绍其在内核链表操作中的应用。 一、双循环链表的基本结构 双循环链表的每个节点包含三个部分:数据域、后继指针和前驱指针。数据域用于存储实际的数据...

    c++ 模板 双向链表 操作

    总结一下,C++模板提供了创建泛型代码的能力,使得我们可以编写适用于多种数据类型的双向链表类。双向链表是一种灵活的数据结构,其节点包含前向和后向指针,便于在链表中进行双向遍历和操作。通过学习和理解这些...

    链表面试题总结

    链表的反转是链表操作中的一个重要问题,包括迭代法和递归法两种主要实现方式。 #### 迭代法示例 ```cpp ListNode* reverseList(ListNode* head) { ListNode *prev = NULL, *curr = head, *next = NULL; while ...

    链表的综合操作(谭浩强经典程序)

    通过上述分析可以看出,这个程序是一个典型的链表操作案例,它涵盖了链表创建、插入、删除和打印等多个方面的内容。对于初学者而言,这是一个非常好的学习示例,可以帮助理解链表的基本概念和常用操作方法。通过实践...

Global site tag (gtag.js) - Google Analytics