双指针
双指针一般可以分为两类,一类是快慢指针,一类是左右指针。快慢指针通常是用来解决链表中的问题,比如典型的是判断链表中是否含有环,左右指针主要是用来解决数组/字符串的问题,比如二分搜索等
这道题主要是用快慢指针解决
快慢指针
- 初始化:两个指针都指向链表头节点head
- 前进:快指针fast在前,慢指针在后
判断链表是否有环
- 链表的特点就是每个节点都只知道下一个节点,所以一个指针是无法判断是否有环的,如果链表中不含环,那么这个指针最终会遇到空指针null,这样就知道链表到头了
- 但如果链表中有环,那就会陷入死循环,因为链表中没有null作为尾部节点。
- 所以判断单链表是否包含环,经典解法就是用双指针,一个跑得快,一个跑得慢,如果不含有环,那么跑得快的那个指针就会遇到null,但如果有环,那么快指针会超慢指针一圈,最终和慢指针相遇。
boolean isHasCycle(ListNode head){
ListNode fast,