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

  • 相关阅读:
    (4.12)全面解析-SQL事务+隔离级别+阻塞+死锁
    【生产问题】--8KW的数据表导致业务卡顿
    (4.6)数据页深入探索--内部探索聚集索引
    (4.11)DBCC 常用命令
    数据库设计与性能优化
    有些事女人忍受不了
    android系列控件
    java常量
    context startactivity
    AssetManager
  • 原文地址:https://www.cnblogs.com/zhaoyl/p/2476846.html
Copyright © 2011-2022 走看看