剑指offer-----两个链表的第一个公共节点

1、题目描述

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


2、思路

(1)分别计算两个链表的长度。并计算出两个链表的长度差gap。

(2)使节点较多的链表先走gap步。

(3)使两个链表一起走,碰到的第一个相同的节点,便是它们的第一个公共节点。

3、代码实现

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


    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2){
        int length1 = 0;
        int length2 = 0;
        ListNode node1 = pHead1;
        ListNode node2 = pHead2;
        while(node1!=null){
            length1++;
           node1 = node1.next;
            
        }
        while(node2!=null){
            length2++;
            node2 = node2.next;
        } 
        
        if(length1>length2){
            int gap = length1 - length2;
            for(int i=0;i<gap;i++){
                pHead1 = pHead1.next;
            }
            
        }else{
            int gap = length2- length1;
            for(int i=0;i<gap;i++){
                pHead2= pHead2.next;
            }
            
        }
        while(pHead1!=null && pHead2!=null){
            if(pHead1 == pHead2){
                return pHead1;
                    
            }
            pHead1 = pHead1.next;
            pHead2 = pHead2.next;


        }
        return null;
    }
}


猜你喜欢

转载自blog.csdn.net/g1607058603/article/details/81038066