剑指Offer-链表-(6)

知识点/数组:链表

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

思路:

蛮力法:在第一个链表遍历每个节点,每遍历到一个节点,就在第二个链表上遍历每个节点。如果在第二个链表上有一个节点和第二链表上的节点一样,则说明两个链表在这个节点上重合,于是找到了他们的公共节点。时间复杂度:O(m*n);

观察如果两个链表有重复的节点,那么公共节点出现在链表的尾部。如果我们从两个链表的尾部开始比较,那么最后一个相同的节点就是我么你要找的节点。

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if(pHead1==null||pHead2==null) {return null;}
        int count1=0;
        ListNode p1= pHead1;
        while(p1!=null){
            p1=p1.next;
            count1++;
        }
        int count2=0;
        ListNode p2= pHead2;
        while(p2!=null){
            p2=p2.next;
            count2++;
        }
        int result=count1-count2;
        if(result>0){
            while(result>0){
                pHead1=pHead1.next;
                result--;
            }
            while(pHead1!=pHead2){
                pHead1=pHead1.next;
                pHead2=pHead2.next;
            }
            return pHead1;
        }
        if(result<=0){
            while(result<0){
                pHead2=pHead2.next;
                result++;
            }
            while(pHead1!=pHead2){
                pHead1=pHead1.next;
                pHead2=pHead2.next;
            }
            return pHead1;
        }
        return null;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35649064/article/details/84854968
今日推荐