leetcode160. Intersection of Two Linked Lists

来源:互联网 发布:官方软件下载中心 编辑:程序博客网 时间:2024/06/05 14:58
本道题找到两条链表相交部分的第一个节点,如果没有则返回null。我的思路是,如果两条链表相交,则从它们第一个相同的节点开始后面的部分均相同。那么就找到一个size = min(size1,size2),两条链表在这个size范围内依次迭代直到找到第一个相同的节点为止。
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {        if (headA == null || headB == null)            return null;        ListNode p = headA, q = headB;        int size1 = 1, size2 = 1;        while (p.next != null) {            size1++;            p = p.next;        }        while (q.next != null) {            size2++;            q = q.next;        }        p = headA;        q = headB;        int min = (int)Math.min(size1, size2);        for (int i = 0; i < size1 - min; i++)            p = p.next;        for (int i = 0; i < size2 - min; i++)            q = q.next;        while (q != p) {            q = q.next;            p = p.next;        }        return q != null ? q : null;    }}
原创粉丝点击