这道题是2012年我回母校参加百度实习笔试时做的题目,当时乱七八糟就做了:
判断两个链表是否相交
问题复杂化:
如果链表有环
这道是一道25分的编程题~话说当时只要写出算法思想就可以了~
原题好像是
网页爬虫在抓取网页时,从指定的URL站点入口开始爬取这个站点上的所有URL link,抓取到下一级link对应的页面后,同样对页面上的link进行抓取从而完成深度遍历。为简化问题,我们假设每个页面上至多只有一个link,如从www.baidu.com/a.html链接到www.baidu.com/b.html再链到www.baidu.com/x.html,当爬虫抓取到某个页面时,有可能再链回www.baidu.com/b.html,也有可能爬取到一个不带任何link的终极页面。当抓取到相同的URL或不包含任何link的终极页面时即完成爬取。爬虫在抓取到这些页面后建立一个单向链表,用来记录抓取到的页面,如:a.html->b.html->x.html...->NULL。 问:对于爬虫分别从www.baidu.com/x1.html和www.baidu.com/x2.html两个入口开始获得两个单向链表,得到这两个单向链表后,如何判断他们是否抓取到了相同的URL?(假设页面URL上百亿,存储资源有限,无法用hash方法判断是否包含相同的URL) 请先描述相应的算法,再给出相应的代码实现。(只需给出判断方法代码,无需爬虫代码)
从百度文库copy下来的~
当时幼稚的我~竟然没有发现这道题的考点~以为只是简单的对比每一个节点的地址~
现在想来好傻啊~主要是基础知识不过关吧~
没有系统的训练过用适当的数据结构来解决实际问题~
这道题有个很明显的特征:(将题意简单化)
单项链表~一个节点有且只有一个后继节点
将题目翻译成计算机语言就是:是否两个单向链表相交了~ 相交的更加直白的含义就是有相同的节点~
如果两条链表有相同的节点,那么这个节点的后继节点也将会是相同,乃至到最后一个节点,知道NULL的出现都是相同
复杂化:
因为题意中并没有说单链表有没有环这种东西的存在~
所以如果想要拿到这道题的满分~需要考虑的环~
如果是环的话,可能就会复杂一点了~
起初我不知道怎样表达~我上网查询了一下,大牛是这样给出解释的:
首先确定一条链的环
设两个指针A,B A指针+1递增扫描单链~B指针+2递增扫描单链~
刚刚吃晚饭时突然想到BUG了~扫描链表怎样算结束?
如果环是从结尾链到开头的话~那么这个链表不管从哪个节点入手,都是能回到原点的~这是循环链表
如果环是 1-2-3-4-5-6-3-4-5-6····依次循环~部分环~
似乎这样有环的链表都是无法结束的~ 也就是没有NULL的~ 那遇到这样的情况怎样才会跳出循环呢~
情况一:有环,那么可以拿1-2-3那做测试 指针A+1 B+2 也就是++和+2=~两轮之后就A和B指向的元素就相同了~
情况二:没有环,如果没有环,那么肯定有NULL的存在,那么大的限制条件就是指针+1后不能指向NULL,否则循环结束~
尼玛~这么简单的问题~ 半天都想不清楚~ 老了老了~~~~