相交链表-力扣

一、题目描述

相交链表-力扣_第1张图片

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

二、题解 

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

相交链表-力扣_第2张图片

解决改题目,我们可以:

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;
    }
}

 

 

 

你可能感兴趣的:(链表,数据结构,leetcode,1024程序员节)