2022年2022年链表的相交与环问题 .pdf
《2022年2022年链表的相交与环问题 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年链表的相交与环问题 .pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1、给出两个单向链表的头指针pHead1和 pHead2,判断这两个链表是否相交。假设两个链表均不带环。示意图如下:如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有的。也就是说,如果两个链表相交,那么最后一个节点肯定是共有的。先遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交,否则不相交。时间复杂度为O(len1+len2),因为只需要一个额外指针保存最后一个节点地址,空间复杂度为O(1)。(编程之美上面有详细的介绍)2、给出一个单向链表的头指针pHead,判断链表中是否有环。示意图如下:链表
2、中有环,其实也就是自相交。我们用两个指针pslow和 pfast从头开始遍历链表,pslow每次前进一个节点,pfast每次前进两个结点,若存在环,则pslow和 pfast肯定会在环中相遇,若不存在,则pslow和 pfast能正常到达最后一个节点(实际上是到达 NULL)。代码如下:/判断链表中是否有环bool IsExitLoop(LinkList*head)LinkList*pslow=head;LinkList*pfast=head;while(pfast!=NULL&pfast-next!=NULL)pslow=pslow-next;/每次前进一步pfast=pfast-next-
3、next;/每次前进二步if(pslow=pfast)/两个指针相遇,说明存在环return true;return false;/没有环名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 3 页 -2、给出两个单向链表的头指针pHead1和 pHead2,判断这两个链表是否相交,若相交返回第一个相交的节点。假设两个链表均不带环。方法一:判断两个链表中是否存在地址一致的节点,就可以知道是否相交了。可以对第一个链表的节点地址进行hash排序,建立 hash 表,然后针对第二个链表的每个节点的地址查询 hash 表,如果它在 hash表中出现,则说明两个链表有共同的结点。这个方法的时间复
4、杂度为:O(max(len1+len2);但同时还得增加O(len1)的存储空间存储哈希表。这样减少了时间复杂度,增加了存储空间。以链表节点地址为值,遍历第一个链表,使用Hash保存所有节点地址值,结束条件为到最后一个节点(无环)或Hash 中该地址值已经存在(有环)。方法二:对第一个链表遍历,计算长度len1,同时保存最后一个节点的地址。对第二个链表遍历,计算长度len2,同时检查最后一个节点是否和第一个链表的最后一个节点相同,若不相同,则不相交,程序结束。若相交,两个链表均从头节点开始,假设len1大于 len2,那么将第一个链表先遍历len1-len2个节点,此时两个链表当前节点到第一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年链表的相交与环问题 2022 年链表 相交 问题
限制150内