zoukankan      html  css  js  c++  java
  • 编程之美:编程判断两个链表是否相交

    1.问题描述

    给出两个单向链表的头指针,比如h1、h2,判断两个链表是否相交。编程之美为了简化问题,假设两个链表均不带环。

    如下图:

    2.分析与解法

    解法一:直观法,先判断第一个链表的每个节点是否在第二个链表中,这种方法时间复杂度为O(Length(h1)*Length(h2))

    解法二:hash表计数法,首先将第一个链表的所有节点地址进行hash排序,建立hash表,然后针对第二个链表的每个节点的地址,查询hash表,如果它在hash表中存在,那么说明两个链表有交点。这个方法时间复杂度O(Length(h1)+Length(h2)),空间复杂度O(Length(h1))。

    解法三:转换为是否有环问题,可以将第一个链表的的结尾接到第二个链表表头,然后遍历第二个链表,测试其是否有关,若有环,则表示两个链表相交。方法时间复杂度O(Length(h1)+Length(h2))

    解法四:先遍历第一个链表,遍历到最后一个节点,然后遍历第二个链表,到最后一个接节点,然后对比两个最后一个节点,相同则相交,不相同,则不相交。方法时间复杂度O(Length(h1)+Length(h2))。代码如下:

    struct node
    {
           int data;
           node *next;
    };
    
    int isCross(node *h1, node *h2)
    {
        node *p, *q;
        
        for(p = h1; p->next!=NULL; p++);    
        for(q = h2; q->next!=NULL; q++);
        
        return p == q ? 1 : 0; 
    }
  • 相关阅读:
    Spring线程池由浅入深的3个示例
    ThreadPoolExecutor之一:使用基本介绍
    Spring中的线程池ThreadPoolTaskExecutor介绍
    ThreadPoolTaskExecutor异常收集
    SPRING中的线程池ThreadPoolTaskExecutor
    ThreadPoolTaskExecutor的配置解释
    jenkins邮件配置
    使用Jenkins配置自动化构建
    Hudson和Jenkins的关系
    PV 和 UV IP
  • 原文地址:https://www.cnblogs.com/biyeymyhjob/p/2643990.html
Copyright © 2011-2022 走看看