剑指offer 52 输入两个链表,找出它们的第一个公共节点。

204 阅读1分钟

输入两个链表,找出它们的第一个公共节点。

如下面的两个链表:

image.png

在节点 c1 开始相交。

/*
链表中,a.next为a的下一个
链表中,若a为null,则整个链表已经遍历到了尾端
如何做?
让A和B遍历相同的路程,都走一个分别的头、公共的尾巴,这样子二者相等时候一定是第一个公共节点。
如题述的图片,A跑完5个,B跑到公共的4位置。A再从B的headB跑,B也是跑到最后从headA开始,由于二者分别跑的是公共尾巴一次,各自头部一次,当节点相等时,即为8那个节点,a与b相遇
*/
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode a = headA;
        ListNode b = headB;
        while(a != b) {
            a = a != null ? a.next:headB;
            b = b != null ? b.next:headA;
        }
        return a;
    }
}

image.png

参考:leetcode-cn.com/problems/li…