LeetCode142链表环的入口

连接

在这里插入图片描述

在141的基础上进行改进,先要判断链表是否有环,然后可以发现规律

在这里插入图片描述

package CLinkedList;

import AarrayProblem.Problem704;

/**
 * @Author Zhou  jian
 * @Date 2020 ${month}  2020/4/9 0009  18:31
 *
 * 环形链表的入环位置
 */
public class Problem142 {

    public ListNode detectCycle(ListNode head) {

        //先判断链表是否有环
        //链表有环
        ListNode meet = hasCycle(head);
        ListNode temp = head;
        //存在相遇节点
        if(meet!=null){
            meet=meet.next;
            //
            while(temp!=meet){
                temp=temp.next;
                meet=meet.next;
            }

            return temp;
        }

        return null;
    }

    //返回快慢指针相遇的节点
    public ListNode hasCycle(ListNode head){


        if(head == null || head.next == null)   return null;



        //定义快慢指针
        ListNode slow = head;
        ListNode quick = head;

        //
        while(quick.next!=null&&quick.next.next!=null){

            if(quick==slow) return quick;
            //更新快慢指针
            quick=quick.next.next;
            slow=slow.next;

        }
        return null;
    }


    public static void main(String[] args) {

        ListNode head = new ListNode(3);
        ListNode B = new ListNode(2);
        ListNode C = new ListNode(0);
        ListNode D = new ListNode(-4);

        head.next=B;
        B.next=C;
        C.next=D;
        D.next=B;

        Problem142 problem142 = new Problem142();
        problem142.detectCycle(head);


    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值