题目:输入两个链表的头节点,判断这两个链表是否存在相交
链表的定义如下:
typedef int Elemtype;
typedef struct ListNode
{
Elemtype data;//值域
ListNode *m_pNext;//指针域
}ListNode,*PListNode;
看到这个题目后大多数的人的第一反应应该就是,判断这两个链表的任意一个节点的指针是否相同,如果有那么这两个链表相交,否则不想交,然后呢用二重for循环来一一查找。显然这是一种笨方法,时间效率极其低下,那么我们来分析如何能够优化该解决方案呢?
首先我们先来分析,两个链表相交能出现哪些情况呢?
第一种:
在第n个节点开始这两条链表的后续重叠。好像两个相爱的人,在相遇了之后,便永不分离。
第二种:
这种相交情况在现实中虽然存在,但是呢,在链表目前的状态下,是无法实现的,因为每一个m_pNext指针只能指向下