博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
14. 判断两个单链表是否相交
阅读量:6243 次
发布时间:2019-06-22

本文共 2011 字,大约阅读时间需要 6 分钟。

  1. 如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有的。 也就是说,如果两个链表相交,那么最后一个节点肯定是共有的。     先遍历第一个链表,记住最后一个节点,然后遍历第二个链表, 到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交,    否则不相交。时间复杂度为O(len1+len2),因为只需要一个额外指针保存最后一个节点地址, 空间复杂度为O(1) 
  2. public static boolean isIntersect(Node head1, Node head2) {        if (head1 == null || head2 == null) {            return false;        }        Node tail1 = head1;        // 找到链表1的最后一个节点        while (tail1.next != null) {            tail1 = tail1.next;        }        Node tail2 = head2;        // 找到链表2的最后一个节点        while (tail2.next != null) {            tail2 = tail2.next;        }        return tail1== tail2;    }
    1. 求两个单链表相交的第一个节点 对第一个链表遍历,计算长度len1,同时保存最后一个节点的地址。   对第二个链表遍历,计算长度len2,同时检查最后一个节点是否和第一个链表的最后一个节点相同,若不相同,不相交,结束。   两个链表均从头节点开始,假设len1大于len2    那么将第一个链表先遍历len1-len2个节点,此时两个链表当前节点到第一个相交节点的距离就相等了,然后一起向后遍历,直到两个节点的地址相同。  时间复杂度,O(len1+len2) 
      // 方法:求两个单链表相交的第一个交点    public static Node getFirstCommonNode(Node head1, Node head2) {        if (head1 == null || head2 == null) {            return null;        }        int len1 = 1;        Node tail1 = head1;        while (tail1.next != null) {            tail1 = tail1.next;            len1++;        }        int len2 = 1;        Node tail2 = head2;        while (tail2.next != null) {            tail2 = tail2.next;            len2++;        }        // 不相交直接返回NULL        if (tail1.data != tail2.data) {            return null;        }        Node n1 = head1;        Node n2 = head2;        // 略过较长链表多余的部分        if (len1 > len2) {            int k = len1 - len2;            while (k != 0) {                n1 = n1.next;                k--;            }        } else {            int k = len2 - len1;            while (k != 0) {                n2 = n2.next;                k--;            }        }        // 一起向后遍历,直到找到交点        while (n1 != n2) {            n1 = n1.next;            n2 = n2.next;        }        return n1;    }

      转自:http://blog.csdn.net/fightforyourdream/article/details/16353519

    2. https://wenku.baidu.com/view/f8d229ca83c4bb4cf6ecd173.html
你可能感兴趣的文章
看麦肯锡如何分析中国城市群
查看>>
《数据分析变革:大数据时代精准决策之道》一1.4 全面看待运营型分析
查看>>
一分钟自我介绍:阿里云CDN
查看>>
《iOS 8开发指南》——第6章,第6.5节实战演练——使用模板Single View Application...
查看>>
【观点】离开了信息化,大数据就是为他人作嫁衣
查看>>
《HTML5+CSS3网页设计入门必读》——1.4 分裂:WHATWG TF
查看>>
《JavaScript核心概念及实践》——第2章 基本概念 2.1 数据类型
查看>>
Linux有问必答:如何修复"fatal error: jsoncpp/json/json.h: No such file..."
查看>>
阿里数据库内核月报:2016年11月
查看>>
简单了解Disruptor(一)
查看>>
编写更好 Bash 脚本的 8 个建议
查看>>
Mavens实战 1.5小结
查看>>
《 硬件创业:从产品创意到成熟企业的成功路线图》——第1章 硬件创业概述 1.1 早期的创客们...
查看>>
《Android游戏开发详解》——第3章,第3.5节继承
查看>>
《Docker生产环境实践指南》——2.6 编排
查看>>
Docker学习(一)
查看>>
云端架美购,精品零距离
查看>>
Java设计模式--享元模式
查看>>
码栈开发手册(五)---可视化方式开发(模块详解--浏览图)
查看>>
每天一个设计模式之装饰者模式
查看>>