相交链表-力扣

一、题目描述

2e24ed50912d4823822f0263b0e22f4a.png

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

二、题解 

 注意题目所说的相交,相交节点不只是数值上的相等,而是相交以后两条链变成一条链。

c3e6713c51f8461ab07b8bd0ce6da80b.png

解决改题目,我们可以:

1、先求出两条链表的长度,然后求出长度的差值len;

2、定义两个节点pl、pspl节点始终指向较长的那个链表,ps节点始终指向较短的那个链表,并且一开始,两个节点均指向链表的头节点;

3、让指向较长链表的pl节点先走差值len步,然后pl、ps两个节点一起走,直到两个节点相遇,此时分两种情况:

  • pl = null,即两个链表不相交,返回null
  • pl不为空,则此时pl所指节点正是所求的相交节点

 

三、代码 

    public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode pl = headA;
        ListNode ps = headB;
        int len1 = 0;
        int len2 = 0;
        while(pl != null) {
            len1++;
            pl = pl.next;
        }
        while(ps != null) {
            len2++;
            ps = ps.next;
        }
        pl = headA;
        ps = headB;
        int len = len1-len2;
        if(len < 0) {
            pl = headB;
            ps = headA;
            len = len2-len1;
        }
        while(len!=0) {
            pl = pl.next;
            len--;
        }
        while(pl!=ps) {
            pl = pl.next;
            ps = ps.next;
        }
        if(pl == null) {
            return null;
        }
        return pl;
    }
}

 

 

 

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值