剑指offer 两个链表的第一个公共结点

来源:互联网 发布:mac os ps 破解版 编辑:程序博客网 时间:2024/05/19 16:04

题目描述

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

/**     * 遍历两个链表得到它们的长度     * 第二次遍历,在较长的链表上先走若干步,接着同时在两个链表上遍历     * @param pHead1     * @param pHead2     * @return     */    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {        int len1 = getListLength(pHead1);        int len2 = getListLength(pHead2);        int len = len1 - len2;        ListNode pHeadLong = pHead1;        ListNode pHeadShort = pHead2;        if (len2 > len1) {            pHeadLong = pHead2;            pHeadShort = pHead1;            len = len2 - len1;        }        for (int i = 0; i < len; i++) {            pHeadLong = pHeadLong.next;        }        while (pHeadLong != null && pHeadShort != null) {            if (pHeadLong == pHeadShort) {                break;            }            pHeadLong = pHeadLong.next;            pHeadShort = pHeadShort.next;        }        return pHeadLong;    }    public int getListLength(ListNode head) {        int len = 0;        ListNode ptr = head;        while (ptr != null) {            ++len;            ptr = ptr.next;        }        return len;    }
0 0