【链表问题】判断无环单链表是否相交

该博客讨论了如何判断两个无环单链表是否相交的问题,提供了两种方法:1) 使用哈希表记录第一个链表的节点,然后遍历第二个链表,如果发现哈希表中有相同的节点则相交;2) 利用链表相交的特性,通过比较两个链表长度并调整起始位置,逐个节点对比直至找到相交点或遍历完。
摘要由CSDN通过智能技术生成

目录

 

题目

思路

哈希表判断两链表是否相交

根据链表相交性质判断


题目

现在有两个无环单链表,若两个链表的长度分别为m和n,判断这两个链表是否相交。

给定两个链表的头结点headAheadB,请返回一个bool值,代表这两个链表是否相交。保证两个链表长度小于等于500。

思路

首先明确,两个链表相交是指从某个节点开始,存储的下一个节点的地址相同。相交的结点即为公共节点,这个节点之后的节点都是公共节点

哈希表判断两链表是否相交

时间复杂度为O(n + m),额外空间复杂度为O(N),N为大于len1的常数

先遍历第一个链表,把第一个链表的节点放入哈希表中,遍历第二个节点,一旦发现有相同节点即说明两个链表相交。时间复杂度为O(len1+len2)。哈希表存储的应该是节点的地址,关键字通过哈希函数求得。

可用除k取余法,如用数组表示的哈希表为ListNode * l[9] = {NULL};

那么在设置hash函数时,取不大于9的质数作为被除数,如7.

int Hash(void* ke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值