zoukankan      html  css  js  c++  java
  • 判断链表是否相交

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

      设置两个指针,一个慢步长为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

  • 相关阅读:
    Dos.ORM logo.Net轻量级开源ORM框架 Dos.ORM
    C# FUNC 应用
    WCF教程网址
    C#扩展方法实现 byte[] 输出为HEX字符串形式
    apache配置,禁止指定后缀访问
    IServerChannelSinkProvider
    在服务器端的远程对象中加上抽象工厂的接口和实现类
    pannel加载窗体
    权限框架
    工作周记
  • 原文地址:https://www.cnblogs.com/zhaoyl/p/2476846.html
Copyright © 2011-2022 走看看