面试题02.07.链表相交

面试题02.07.链表相交,第1张

面试题02.07.链表相交

面试题02.07链表相交


public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode curA = headA;
        ListNode curB = headB;
        int lenA = 0, lenB = 0;
        while(curA != null){//求链表A的长度
            lenA++;
            curA = curA.next;
        }
        while(curB != null){//求链表B的长度
            lenB++;
            curB = curB.next;
        }
        curA = headA;
        curB = headB;
        // 让curA为最长链表的头,lenA为其长度
        if(lenB > lenA){
            //1. swap(lenA,lenB)
            int tmplen = lenA;
            lenA = lenB;
            lenB = tmplen;
            //2. swap(curA,curB)
            ListNode tmpNode = curA;
            curA = curB;
            curB = tmpNode;
        }
        // 求长度差
        int gap = lenA - lenB;
        // 让curA和curB在同一起点上(末尾位置对齐)
        while(gap-- > 0){
            curA = curA.next;
        }
        // 遍历curA和curB,遇到相同则直接返回
        while(curA != null){
            if(curA == curB){
                return curA;
            }
            curA = curA.next;
            curB = curB.next;
        }
        return null;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5694768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存