给定两个链表,找出两个链表相交的起始交点

通过计算两个链表的长度差,先让较长的链表前进相应步数,然后同时移动两个链表的指针,直到它们相遇,找到两个链表相交的起始节点。
摘要由CSDN通过智能技术生成

给定两个链表,找出两个链表相交的起始交点

思路:首先求出两个链表的长度,再求出它们的长度差,然后让较长的链表走差值步,然后再让它们一起走,如果它们相遇且不为null,代表此时就是它们的起始交点。

public static Nodee Findpublic(Nodee headA,Nodee headB) {//这是针对两个单链表,所以把方法写在这里比较合适,链表类针对的是一个单链表
        Nodee ps = headA;//定义一个ps来指向短的单链表
        Nodee pl = headB;//定义一个pl指向长的单链表
        int lenA = 0;
        int lenB = 0;
        while(ps!=null) {//先求链表A的长度
            ps = ps.next;
            lenA++;
        }
        while(pl!=null) {//再求链表B的长度
            pl = pl.next;
            lenB++;
        }
        pl = headB;//因为上面的循环执行完之后ps和pl都已经为null了,所以要重新定义回来
        ps = headA;
        int len = lenB - lenA;//计算这两个链表的长度差
        if(len<0) {//说明链表B比链表A要短
            ps = headB;//让ps重新指向B
            pl = headA;//让p重新指向A
            len = lenA-lenB;//重新计算差值
        }
        //此时pl一定指向的是最长的单链表。
        f
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值