• 判断链表是否相交


    首先,判断单个链表是否含有环:

      设置两个指针,一个慢步长为1,一个快步长为b,如果两个指针在某一位置重合,则有环,否则无环,类似于俩人在操场上跑圈。这只是一个宏观思路,具体怎么用计算机思维实现,自定。

    然后,分情况讨论:

    情况一:两条单链表均无环

         最简单的一种情况,由于两条链表如果交叉,他们的尾节点必然相等(Y字归并),所以只需要判断他们的尾节点是否相等即可。

    情况二:两条单链表均有环

        这种情况只需要拆开一条环路(注意需要保存被设置成null的节点),然后判断另一个单链表是否仍然存在环路,如果存在,说明无交叉,反之,则有交叉的情况。

    情况三:两条单链表,一条有环路,一条无环路

        这种情况显然他们是不可能有交叉的。

    扩展问题

    1)  交叉链表,如何找到交叉点?
    设较长链表为head1,两指针p1和p2分别对链表head1和head2从头遍历,步长均为1,让p1先移动nLen1 - nLen2步,再让p1和p2同时移动,则p1与p2相遇处即为交叉点处。

    2)  单链表,如果有环,长度是多少?  如果有环,环的起点位置? 参见 http://www.cnblogs.com/xudong-bupt/p/3667729.html

  • 相关阅读:
    Spring源码解读 推荐流程
    Spring源码解读 推荐流程
    验证数据归属
    验证数据归属
    maven用途、核心概念、用法、常用参数和命令、扩展
    Reverse Linked List II
    Insertion Sort List
    Palindrome Partitioning
    Construct Binary Tree from Preorder and Inorder Traversal
    Valid Parentheses
  • 原文地址:https://www.cnblogs.com/zhaoyl/p/2476846.html
Copyright © 2020-2023  润新知