美文网首页
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