博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 142. Linked List Cycle IIJAVA语言
阅读量:6211 次
发布时间:2019-06-21

本文共 1021 字,大约阅读时间需要 3 分钟。

1
2
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.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 
* 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相遇。则此时的相遇点位环入口!!!!!详情见  

里面有一段推导

本文转自 努力的C 51CTO博客,原文链接:http://blog.51cto.com/fulin0532/1905477

转载地址:http://fykja.baihongyu.com/

你可能感兴趣的文章
关于Java ThreadLocal
查看>>
使用iscroll
查看>>
MY域名,什么是MY域名?
查看>>
第二十天:expand
查看>>
coreData
查看>>
使用Matrix对象旋转和缩放图像
查看>>
JS 固定图片背景
查看>>
PreparedStatement
查看>>
错误: ‘EOF’在此作用域中尚未声明
查看>>
ajax跨域提交
查看>>
try_catch_finally的注意事项
查看>>
黄健:开放沟通,一”触“即发
查看>>
陆怡-互联网金融系统中的资金正确性保障
查看>>
Android Studio Gradle编译项目报错弹出一个提示框没有具体的错误信息
查看>>
数独游戏
查看>>
vImageCategory
查看>>
PopupView
查看>>
(java)实现进度条开发过程
查看>>
Python --- pyExcelerator库和xlrd库
查看>>
saltstack 基础入门文档
查看>>