160.相交链表

Posted 小刘你最强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了160.相交链表相关的知识,希望对你有一定的参考价值。

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

图示两个链表在节点 c1 开始相交:

思路:计算两个链表的长度,指针现在长的链表走一个长度差,然后一起走,直到相遇

public class Solution 
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) 
        ListNode curA = headA;
        ListNode curB = headB;
        int lenA = 0;
        int lenB = 0;
        while(curA != null) 
            lenA++;
            curA = curA.next;
        
        while(curB != null) 
            lenB++;
            curB = curB.next;
        
        curA = headA;
        curB = headB;
        if(lenA < lenB) 
            ListNode tNode = curA;
            curA = curB;
            curB = tNode;
            int tLen = lenA;
            lenA = lenB;
            lenB = tLen;
        
        int len = lenA - lenB;
        while(len-- > 0) 
            curA = curA.next;
        
        while(curA != null) 
            if(curA == curB) 
                return curA;
            
            curA = curA.next;
            curB = curB.next;
        
        return null;
    

public class Solution 
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) 
        ListNode curA = headA;
        ListNode curB = headB;
        while(curA != curB) 
            curA = curA != null ? curA.next : headB;
            curB = curB != null ? curB.next : headA;
        
        return curA;
    

以上是关于160.相交链表的主要内容,如果未能解决你的问题,请参考以下文章

链表160. 相交链表

160. 相交链表

LeetCode题解160_相交链表

leetcode 160.相交链表

160. 相交链表

LC 160. 相交链表