
这是环形链表的升级版,也就是找到尾部连接的第二个节点并返回;
分两步:第一步判断是否有环,第二步找到节点
为什么找到节点是这样?原因是快慢指针相遇之后,慢指针到head的距离和新指针q到head的距离相同,这是作为慢指针p1和新指针q再一起动,相遇的点就是入口点
    public ListNode detectCycle(ListNode head) {
        if (head == null || head.next == null)
            return null;
        ListNode p1 = head, p2 = head;
        int tag = 0;//标记是否有环
        while (p2 != null) {
            p1 = p1.next;
            if (p2.next == null) {
                tag = 0;
                break;
            } else {
                p2 = p2.next.next;
            }
            if (p1 == p2) {
                tag = 1;
                break;
            }
        }
        if (tag == 0) {
            return null;
        } else {
            ListNode q = head;
            while(p1 != q){
                p1 = p1.next;
                q = q.next;
            }
            return q;
        }
    }
                

















