小景哥哥

世界很大,而我们还需要再成长!

您现在的位置是:首页>爱编程>详细内容

36.两个链表的第一个公共结点

发布时间:2018-08-23 00:00:00编辑:Jason浏览(371)评论(0)

    36.两个链表的第一个公共结点

    题目描述

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

    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            int len1 = 0, len2 = 0;
            ListNode lp1 = pHead1;
            ListNode lp2 = pHead2;
            ListNode pHeadLong = pHead1;
            ListNode pHeadShort = pHead2;
            int nLengthDif = 0;
            while(lp1 != null){
                len1++;
                lp1 = lp1.next;
            }
            while(lp2 != null){
                len2++;
                lp2 = lp2.next;
            }
            if(len2 > len1){
                pHeadLong = pHead2;
                pHeadShort = pHead1;
                nLengthDif = len2 - len1;
            }else{
                nLengthDif = len1 - len2;
            }
            
            for(int i = 0; i < nLengthDif; ++i)
                pHeadLong = pHeadLong.next;
            
            while(pHeadLong != null && pHeadShort != null && pHeadLong != pHeadShort){
                pHeadLong = pHeadLong.next;
                pHeadShort = pHeadShort.next;
            }
            ListNode res = pHeadLong;
            return res;
        }
    }

     

     

     

     

     

关键字词:offer