判断有环链表是否相交

来源:互联网 发布:右上角th mac 编辑:程序博客网 时间:2024/06/05 21:16

有环链表相交,首先两链表都要有环,一个有环一个无环不可能相交。

有环链表相交有三种情况

这里写图片描述
则只需要判断是否共有一个环就行。
思路:分别取两链表上两个环内结点node1和node2,然后让node1遍历,如果与node2相遇,则代表位于一个环,反之,则不想交。

   //求环中相遇结点    public Node cycleNode(Node head){        //链表为空则返回null        if(head == null)            return null;        Node first = head;        Node second = head;        while(first != null && first.next != null){            first = first.next.next;            second = second.next;            //两指针相遇,则返回相遇的结点             if(first == second)                return first;        }        //链表无环,则返回null        return null;    }public boolean isIntersectWithCycle(Node head1,Node head2){        //node1和node2保存环上的一点        Node node1 = cycleNode(head1);        Node node2 = cycleNode(head2);        //如果不存在环上的一点,则代表无环        if(node1 == null || node2 == null)            return false;        Node current = node1.next;        while(current != node1){            //若current与node2相遇,则代表两链表共享一个环即相交            if(current == node2)                return true;            current = current.next;        }            return false;    }
0 0
原创粉丝点击