题解 | #两个链表的第一个公共结点# Hash 映射

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

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    // 计算哈希值
    public int computedHash(ListNode node) {
        int hash = 0;
        if (node != null) {
            hash += (node.val << 17);
        }
        if (node.next != null) {
            hash  = node.next.val << 3 ^ hash;
        }
        System.out.println(node.val);
        System.out.println(hash);
        return hash;
    }
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        HashMap<Integer, ListNode> hmap = new HashMap<>();
        while (pHead1 != null) {
            hmap.put(computedHash(pHead1), pHead1);
            pHead1 = pHead1.next;
        }
        while(pHead2 != null){
            if(hmap.containsKey(computedHash(pHead2))){
                return pHead2;
            }
            pHead2 = pHead2.next;
        }
        return null;
    }
}

哈希函数不唯一,有时候不好用,就把哈希函数调的复杂一些,先计算第一个链表全部的hash值放入map,再遍历第二个链表,根据计算的哈希值就可以查询到对应的节点是否存在,并且返回该节点。

yysy,我的思路更接近于暴力,但是耐不住简单啊,hhh

全部评论

相关推荐

11-13 20:32
门头沟学院 Java
面向未来编程code:我没看到他咋急,他不就问你个问题。。。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务