首先说下我的思路,链表交叉,也就是2个链表最后指向同一块内存区域,所以无论如何,只要交叉,最后一个元素的地址总是相等的...然后,还有一种情况:2个链表内部成环否,当然,只要相交就2个链表都成环了成环好检测,就是设定2个指针,步长不同,遍历,当成环的时候,会出现2个相等的情况,而如果链表成环的话,相交部分必然包含环,不管从环中何点开始相交,a链表中环中元素必然存在于b链表中,基于这个,我开始写代码了。。。。首先我构思了一个辅助函数,检测链表成环。而函数的原型我则构思为:
我的构思是:如果成环,返回TRUE以及判定条件的那个指针,OutPutNodePointer就是这个指针,留作程序自用,并且假如不成环的话,程序将返回FALSE以及指向最后节点的指针以备自用。。。
这时候我们就可以用这个函数来判断是否有环,并且能获得一个关键点这个函数的原型我们将定义为
这时候,当我认为这个题目算是pass掉之后,题目难度加大:找出链表交叉的首点.....经过思考,我大概的认为,思路是,通过上述这个函数IsIntersect,应该再传出来一个指针,也就是代码已经确定相交的点,然后通过这个点,把这个点之前的所有元素的地址复制到一个数组中,然后从数组尾开始往前遍历,任意一个数组到首或者有不相等的情况则跳出。这个时候,这个函数的形参应该再加上一个Out元素,以供别的函数使用,具体代码我就不写了....欢迎指点我更好的方法。