leetcode 160. 相交链表 简单 链表

题目:
在这里插入图片描述

分析:如果两个链表有相交的部分,那么需要让两个链表都走到相交的位置,但问题就出现了,相交前的长度可能是不一样的,怎么可以同时走到相交的位置呢。接着分析发现如果有相交的部分,那么相交后的部分,长度一定是一样的,也就是只有前面未相交的部分长度可能是不一样的,那么想到凑成总长度相同的话问题就得到解决了,怎么凑呢?
可以把前面未相交的部分互相拼接起来,怎么拼?
可以每个链表走到末尾的时候从头去走别人的链表,这样总长度一定是一样的,长度一样速度也一样,如果有相交的话必定能碰上,即使不相交,总长度也还是一样这个结论不变,那么会同时走到“末尾”null

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode headAA = headA;
        ListNode headBB = headB;
        while(headAA != headBB){
            headAA = headAA == null ? headB : headAA.next;
            headBB = headBB == null ? headA : headBB.next;
        }
        //headBB一样
        return headAA;
    }
}

在这里插入图片描述
在这里插入图片描述

发布了134 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_40208575/article/details/105174128