目录
题目
现在有两个无环单链表,若两个链表的长度分别为m和n,判断这两个链表是否相交。
给定两个链表的头结点headA和headB,请返回一个bool值,代表这两个链表是否相交。保证两个链表长度小于等于500。
思路
首先明确,两个链表相交是指从某个节点开始,存储的下一个节点的地址相同。相交的结点即为公共节点,这个节点之后的节点都是公共节点。
哈希表判断两链表是否相交
时间复杂度为O(n + m),额外空间复杂度为O(N),N为大于len1的常数
先遍历第一个链表,把第一个链表的节点放入哈希表中,遍历第二个节点,一旦发现有相同节点即说明两个链表相交。时间复杂度为O(len1+len2)。哈希表存储的应该是节点的地址,关键字通过哈希函数求得。
可用除k取余法,如用数组表示的哈希表为ListNode * l[9] = {NULL};
那么在设置hash函数时,取不大于9的质数作为被除数,如7.
int Hash(void* ke