leetcode253java_Leetcode 142. Linked List Cycle IIJAVA语言

Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Note: Do not modify the linked list.

题意:不破坏原链表的情况下判断有没有环,,,,,,/**

* Definition for singly-linked list.

* class ListNode {

*     int val;

*     ListNode next;

*     ListNode(int x) {

*         val = x;

*         next = null;

*     }

* }

*/

public class Solution {

public ListNode detectCycle(ListNode head) {

/不让修改原来的结构。本来还想用断链法.

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

ListNode fast=head.next.next;

ListNode slow=head.next;

///判断有没有环。找到相遇点

while(fast!=slow){

if(fast.next!=null && fast.next.next!=null){

fast=fast.next.next;

slow=slow.next;

}else{

return null;

}

}

fast=head;

while(fast!=slow){

fast=fast.next;

slow=slow.next;

}

return fast;

}

}

PS:依然是快慢指针。先让fast走两步和slow走一步,判断有没有环先,有环的话就会相遇。当他们相遇后,让fast回到头,此时走一步。直到和slow相遇。则此时的相遇点位环入口!!!!!详情见https://www.nowcoder.com/questionTerminal/253d2c59ec3e4bc68da16833f79a38e4

里面有一段推导

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值