两链表第一个公共节点

时间:2021-02-14 11:00:50

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

思路:先求两个链表的长度,求长度差n,让长的那个链表先走n,两个链表再同时走,直到指针指到相同节点。

 public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if(pHead1==null||pHead2==null) return null;
             int n=0,m=0,cha=0;
        ListNode r1=pHead1,r2=pHead2;
        while(r1!=null){
            n++;
            r1=r1.next;
        }
        
        while(r2!=null){
            m++;
            r2=r2.next;
        }
        if(n>=m){
            cha=n-m;
            while(cha-->0){
                pHead1=pHead1.next;
            }
            while(pHead1!=pHead2){
                pHead1=pHead1.next;
                pHead2=pHead2.next;
            }
           
        }else{
            cha=m-n;
            while(cha-->0){
                pHead2=pHead2.next;
            }
            while(pHead1!=pHead2){
                pHead1=pHead1.next;
                pHead2=pHead2.next;
            }
        }
        return pHead1;
    }