力扣160题之·相交链表

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

如下面的两个链表:

在这里插入图片描述

思路:

分别计算A和B两个链表的长度len1和len2,让长的那个链表先走(len1-len2)步,此时两个链表是处于同步的状态,接下来让两个链表同时走,当找到的第一个节点则为该链表的交点

注意:两个链表的循环判断条件不是他们两节点的val值,而是他们所指的对象。例如:while(A!=null&&B!=null) if(A==B)

代码如下:

1.遍历两个链表,取得len1和len2

//思路:1.先遍历两个链表,取得len1和len2
        //2.让较长的链表先向后移动len1-len2个长度
        //3.两个链表同时走,直到相交的时候
        public int getlenth(ListNode head){
        int len = 0;
        for(ListNode cur = head;cur != null;cur = cur.next){
            len++;
        }
        return len;
    }
    
        int len1 = getlenth(headA);
        int len2 = getlenth(headB);

        

2.让较长的链表先向后移动(len1-len2)个长度

让较长的链表先移动指定长度是为了得到两个长度相同的链表从而可以更方便的对两个链表的比较

if(len1>len2){
            for(int i =0;i<(len1-len2);i++){
                headA = headA.next;
            }
        }else{
            for(int i =0;i<(len2-len1);i++){
                headB = headB.next;
            }
        }

3.两个链表同时走,直到相交的时候

while(headA != null && headB!=null){
            //循环条件不是判断节点的值而是节点对象的身份
            //所以要一直循环下去,直到找到两个链表的交点
            //如果到最后链表为空的时候跳出循环,则说明两个链表不相交
            if(headA == headB){
                return headA;
            }
            headA = headA.next;
            headB = headB.next;
        }
        return null;

循环条件不是判断节点的值而是节点对象的身份,所以要一直循环下去,直到找到两个链表的交点。如果到最后链表为空的时候跳出循环,则说明两个链表不相交。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值