您的位置:首页 > 编程语言

单链表之编程判断两个链表是否相交

2015-10-19 13:09 176 查看
编程判断两个链表是否相交:
如果两个链表相交,那么他们一定有着相同的尾节点,因此实现思路为:分别遍历两个链表,记录它们的尾节点,
如果他们的尾节点相同,那么两个链表相交,否则不相交。

/**
* 如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有的。 也就是说,如果两个链表相交,那么最后一个节点肯定是共有的。
* 先遍历第一个链表,记住最后一个节点,然后遍历第二个链表, 到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交,
* 否则不相交。时间复杂度为O(len1+len2),因为只需要一个额外指针保存最后一个节点地址, 空间复杂度为O(1)
*/
public static boolean isIntersect(Node head1, Node head2) {
if (head1 == null || head2 == null) {
return false;
}

Node tail1 = head1;
// 找到链表1的最后一个节点
while (tail1.next != null) {
// 如果不是尾结点,指针一直后移,直到尾节点
tail1 = tail1.next;
}

Node tail2 = head2;
// 找到链表2的最后一个节点
while (tail2.next != null) {
tail2 = tail2.next;
}

return tail1 == tail2;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: