首页 > 编程语言 >每日算法----链表相交(Java)

每日算法----链表相交(Java)

时间:2024-12-29 19:29:59浏览次数:3  
标签:---- ListNode val 相交 链表 currA Java 节点

双指针

需要找到相交节点,特殊情况两个链表在相交前的节点个数是相同的,这种情况我们只需用两个指针同时遍历两个链表,当currA==currB时,此时就找到了相交节点。

从这个特殊情况可以看出来,我们需要两个链表在相交前的节点个数是相同的,对于两个相交节点不同的情况,当链表A遍历完后,我们让最后一个节点指向链表B,同样的当链表B遍历完之后,我们让链表B的最后一个节点指向链表A。现在这种情况和特殊情况一样了,两个链表在相交前的节点个数是相同的。

文字可能表达的不直观

看上图实例

4->1->8->4->5->5->0->1->8

5->0->1->8->4->5->4->1->8

相交节点为8,前面节点数目相同,这块需要注意的是如果只是当前的值相同不可以,链表是有两个属性的,val和next同时满足才能证明链表相等

public class A06getIntersectionNode {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode currA = headA;
        ListNode currB = headB;

        while (true){
            // 无论是否有无相交,都会在该循环最后走到A,B两个指针相等
            // 有交点,同时指向相交节点 返回相交节点
            // 无交点,同时指向null节点 返回null
            if (currA ==currB){
                return currA;
            }
            if (currA == null){
                currA = headB;// 走完A链表走B链表
            }else {
                currA = currA.next;
            }

            if (currB == null){
                currB = headA;// 走完B链表走A链表
            }else {
                currB = currB.next;
            }
        }
    }
}


 class ListNode {
        int val;
        ListNode next;
        ListNode() {
        }
        ListNode(int val) {this.val = val;}
        ListNode(int val, ListNode next) {this.val = val;this.next = next;}
    }

标签:----,ListNode,val,相交,链表,currA,Java,节点
From: https://blog.csdn.net/m0_74117790/article/details/144783088

相关文章

  • 插入排序
    1if__name__=='__main__':2'''3插入排序41.从第一个元素开始,该元素可以认为已经被排序52.取出下一个元素,在已经排序的元素序列中从后向前扫描63.如果该元素(已排序)大于新元素,将该元素移到下一位置74.重复步骤3,直......
  • 每日算法----环形链表II(Java)
    本题在上个环形链表的基础上增加了难度,让找其环形链表的第一个节点还是原先的思路,定义快慢指针在第一次快慢指针相等时,a是到环形前的节点个数,k是离环形节点有多远快指针走了a+n圈环形+k慢指针走了a+m圈环形+k此时快指针走的路程是慢指针2倍。慢指针=快指针-慢指针=n圈......
  • 每日算法----环形链表(Java)
    快慢指针慢指针一次走一步,快指针一次走两步,环形链表,最后一定会碰到。publicclassA06hasCycle{publicbooleanhasCycle(ListNodehead){ListNodeslow=head;//慢指针ListNodefast=head;//快指针//快指针不为null且下一个节点......
  • 如何使用Python从SACS结构数据文件中提取构件组数据信息并导出
    SACS是一种广泛用于结构分析和设计的软件系统,其数据文件格式常用于存储结构模型和分析结果。本文将介绍如何从一个复杂的SACS文件中提取关键信息,并将其整理成易于理解的表格格式。我们将关注SACS文件中的一个部分,名为“GRUP”,它包含了结构组的数据。我们将学习如何......
  • 【MySQL】表的约束
    表的约束一、介绍二、空属性1、介绍2、使用场景3、注意事项4、示例三、默认值约束(DEFAULT)四、列描述(COMMENT)1、介绍2、注意事项3、示例五、ZEROFILL1、介绍2、应用场景3、示例六、主键约束(PRIMARYKEY)1、介绍2、语法3、示例七、自动递增约束(AUTO_INCREMENT)1、介绍2、......
  • 一棵哈夫曼树共有127个结点,对其进行哈夫曼编码,共能得到()个字符的编码
    哈夫曼树与哈夫曼编码的故事想象你是一位邮递员,你的工作是在一个小镇上传递信件。这个小镇上有很多户人家,但每家的信件量都不同。为了更高效地完成工作,你想到了一个办法:给每家分配一个独特的代码,这样你就可以更快地识别出信件应该送到哪家。这个独特的代码就是哈夫曼编码。而......
  • spring boot @ansy 底层异步线程原理代码简要说明及代码示例
    在SpringBoot中,使用@Async注解可以非常方便地实现方法的异步调用。其底层是基于Spring的TaskExecutor实现的。以下是@Async异步线程原理的简要说明及代码示例。原理1.注解声明:在需要异步执行的方法上使用@Async注解。2.配置启用:在主类或配置类上启用异步支持,通过添加......
  • 《数据结构》期末考试测试题【上】
    数据结构测试题1.数据结构是指什么?2.某语句时间复杂为?3.关于数据结构的说法那个正确?4.一个算法的评价标准包括哪些方面?5.时间复杂度指的是什么?6.算法的重要特征有那些?7.某语句时间复杂为?8.存储数据时要存储什么?9.某语句时间复杂为?10.某语句时间复杂为?11.某二叉树的遍历......
  • 初识网络IO
    目录初识IO什么是IO流IO流的作用IO流的分类IO流实战应用深入分析Java中的IO流IO流的数据来源本地磁盘文件操作之File类File类基本操作文件的字节输入输出流基于内存的字节输入输出流基于缓存流的输入输出flush方法序列化和反序列化序列化与反序列化的概念核心......
  • C# OpenCV机器视觉:漫水填充
    在一个阳光灿烂得简直要闪瞎人眼的下午,阿强正在实验室里和他的那些宝贝仪器们“谈情说爱”,捣鼓他的最新宝贝项目——一个智能得仿佛能看穿一切的图像处理系统。突然,“砰”的一声,门被撞开了,他的好朋友小李像个没头苍蝇似的冲了进来,脸上的焦虑都快溢出来了,仿佛下一秒就要原地......