美文网首页
36、两个链表的第一个公共节点

36、两个链表的第一个公共节点

作者: quiterr | 来源:发表于2017-09-02 21:45 被阅读0次

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

思路:
分别统计两个链表的长度,求出差值。设置两个指针,分别指向两个链表的头结点,然后长链表的指针,先移动差值的距离,之后两个指针同步向前移动,找第一个相等的节点。

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        //计算链表1的长度
        ListNode p1 = pHead1;
        int size1 = 0;
        while(p1!=null){
            size1++;
            p1=p1.next;
        }
        
        ListNode p2=pHead2;
        int size2 = 0;
        //计算链表2的长度
        while(p2!=null){
            size2++;
            p2=p2.next;
        }
        
        p1=pHead1;
        p2=pHead2;
        int offset = 0;
        if(size1>size2){
            offset = size1-size2;
            while(offset>0){
                p1=p1.next;
                offset--;
            }
        }else if(size2>size1){
            offset = size2-size1;
            while(offset>0){
                p2=p2.next;
                offset--;
            }
        }
        
        ListNode p = null;
        while(p1!=null&&p2!=null){
            if(p1==p2){
                p=p1;
                break;
            }
            p1=p1.next;
            p2=p2.next;
        }
        
        return p;
        
    }
}

相关文章

网友评论

      本文标题:36、两个链表的第一个公共节点

      本文链接:https://www.haomeiwen.com/subject/ukvywttx.html