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

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

http://www.nowcoder.com/questionTerminal/6ab1d9a29e88450685099d45c9e31e46

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    /**
    * 解题思路:公共结点后面的链表是一致的。
    * 所区别点在于公共结点之前的链表长度,如果长度相同,那可以走到同一个结点。问题在于公共结点前的链表长度不一致的情况,比如长度差异k
    * 这里将短链表走到尾之后,指向长链表,这样就可以在长链表走到尾之前先走k步
    * 而长链表走到尾之后,将其指向锻炼表,这样两者在抵达公共结点前的长度就一致了。
    **/
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
         if(pHead1 == null || pHead2 == null) {
             return null;
         }
        ListNode node1 = pHead1;
        ListNode node2 = pHead2;
        while(node1 != node2) {
            node1 = node1.next;
            node2 = node2.next;
            if(node1 == node2) {
                break;
            }
            //让更短的链表走到尾后切换为更长的链表先走
            if(node1 == null) {
                node1 = pHead2;
            }
            if(node2 == null) {
                node2 = pHead1;
            }
        }
        return node1;
        
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务