zoukankan      html  css  js  c++  java
  • 相交链表

    题目 相交链表

    编写一个程序,找到两个单链表相交的起始节点。
    例子:

    思路

    假设链表A的 4->1 这部分为 a , 8->4->5的这部分为 c A=a+c
    假设链表B的 5->0->1 这部分为 b , 8->4->5的这部分为 c B=b+c
    tip:即公共的部分为c

    那么现在在A的后面添加一条和B一样的链,在B后面添加一条和A一样的链
    A=(a+c) + (b+c) ; b=(b+c) + (a+c);
    即A=(a+c+b)+c ;B=(b+c+a)+c;
    聪明的你发现了吧,前面部分(a+c+b==b+c+a)是长度相同的,那么这道题就容易解决了,即第一个相同的点就是第一个交点

    代码

        public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            //A遍历完了给他接上B的,B遍历完第一次给他接上A的,当第一次相等的时候,就是交点
            if(headA==null||headB==null)
                return null;
            ListNode node1 = headA;
            ListNode node2 = headB;
            while(node1!=node2){
                if(node1==null){
                    node1=headB;
                }else{
                    node1=node1.next;
                }
                if(node2==null){
                    node2=headA;
                }else{
                    node2=node2.next;
                }
            }
            return node2;
        }
    
  • 相关阅读:
    Delphi Excel 操作大全
    ThreadLocal类
    MyBatis实战总结
    MyBatis入门
    Mybatis逆向工程
    2020年全国高校计算机能力挑战赛初赛java组
    集合论基础
    命题与逻辑
    Redis技术概述
    UML图中6种箭头的含义
  • 原文地址:https://www.cnblogs.com/bendandedaima/p/13401629.html
Copyright © 2011-2022 走看看