剑指offer(四十四)之两个链表的第一个公共结点

题目描述

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

思路分析:将其中一个链表结点,存进HashMap中,将利用ContainsKey()进行判断是否有公共结点

代码1:

<span style="color:#6600cc;">import java.util.*;
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        ListNode p=pHead1;
        ListNode q=pHead2;
        HashMap<ListNode,Integer> map=new HashMap<ListNode,Integer>();
        while(p!=null){
            map.put(p,null);
            p=p.next;
        }
        while(q!=null){
            if(map.containsKey(q)){
                return q;
            }else{
                q=q.next;
            }
        }
        return null;
    }
}</span>
代码2:

<span style="color:#cc33cc;">public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
         ListNode current1 = pHead1;// 链表1
        ListNode current2 = pHead2;// 链表2
        if (pHead1 == null || pHead2 == null)
            return null;
        int length1 = getLength(current1);
        int length2 = getLength(current2);
        // 两连表的长度差
         
        // 如果链表1的长度大于链表2的长度
        if (length1 >= length2) {
            int len = length1 - length2;
            // 先遍历链表1,遍历的长度就是两链表的长度差
            while (len > 0) {
                current1 = current1.next;
                len--;
            }
 
        }
        // 如果链表2的长度大于链表1的长度
        else if (length1 < length2) {
            int len = length2 - length1;
            // 先遍历链表1,遍历的长度就是两链表的长度差
            while (len > 0) {
                current2 = current2.next;
                len--;
            }
 
        }
        //开始齐头并进,直到找到第一个公共结点
        while(current1!=current2){
            current1=current1.next;
            current2=current2.next;
        }
        return current1;
 
    }
 
    // 求指定链表的长度
    public static int getLength(ListNode pHead) {
        int length = 0;
 
        ListNode current = pHead;
        while (current != null) {
            length++;
            current = current.next;
        }
        return length;
 
    }
}</span>



你可能感兴趣的:(两个链表的第一个公共结点,剑指offer)