首先,判断这两个链表各自是否带环。故存在下面三种情况:
1、两个链表都没带环,此时两个链表可能相交。
2、一个带环,一个不带环,则不可能相交。
3、两个都带环,判断第一个链表fast与slow相遇的结点是否在第二个链表的环中,如果在,则相交(相交时,环是两个链表公有的)
两个链表都没环,解法如下:
//判断两个无环单链表是否相交,如果两个无环但链表相交,则两个链表的最后一个结点一定相等。
bool IsCross(Node* head1, Node* head2)
{
Node* node1 = head1;
Node* node2 = head2;
if (head1 == NULL || head2 == NULL)
return false;
//找两个链表的最后一个结点
while (node1->_next != NULL)
node1 = node1->_next;
while (node2 ->_next!= NULL)
node2 = node2->_next;
if (node1 == node2)
return true;
else
return false;
}