快慢指针
今天没什么废话直接上代码,
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。否则,返回 false 。
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
这个题在进行做的时候,需要将对应的快指针和对应的慢指针概念相结合,这是什么意思呢,就是在进销快指针往前走的时候,需要将对应的判断对应的快指针走的时候,是否进行走到的了null,如果走到了null,则就是和慢指针灭有相撞,那就是证明没有环,就是无环路的链表,相反如果撞到了一起,那就是证明快和慢的都是有环路了,那就可以反会当前的链表是有环链表,判断当前的链表状态是又环还是无环,用快慢指针,在进行解决的时候,可以很好的进行解决掉,整体来说是非常容易和快捷的简单的。在进行操作的时候,可以将快慢指针的操作的步骤进行记录,记录后再将对应的数据进行操作,然后在进行条件判断循环的时候,只要判断出当前的快指针为空,或者快指针的下一个为空,则就直接跳出循环就可与了。
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null ||head.next ==null) return false ;
ListNode solw =head;
ListNode faslt =head.next;
while(faslt !=null &&faslt.next !=null) {
if(solw == faslt) return true ;
solw= solw.next;
faslt= faslt.next.next;
}
return false ;
}
}