本文主要是介绍定个小目标之刷LeetCode热题(20),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这题与上一题有一点不同,上一题是判断链表是否存在环,这题是寻找入环的第一个节点,有一个规则是这样的,在存在环的情况下,运用快慢指针判断是否有环结束时,把快指针指向头结点,慢指针不变,然后循环快慢指针每次只走一步,最终会在入环的第一个节点相遇,代码如下
public class Solution {public ListNode detectCycle(ListNode head) {if (head == null || head.next == null) {return null;}ListNode slow = head, fast = head;while (fast != null) {slow = slow.next;if (fast.next != null) {fast = fast.next.next;} else {return null;}// 如果在快慢指针规则移动指针存在slow == fast说明存在环if (slow == fast) {// 此时需要寻找入环的第一个节点,将fast指向头节点fast = head;// 然后快指针和慢指针各移动一次,最终会在入环的第一个节点相遇while (slow != fast) {slow = slow.next;fast = fast.next;}return fast;}}return null;}
}
题目链接:题单 - 力扣(LeetCode)全球极客挚爱的技术成长平台
这篇关于定个小目标之刷LeetCode热题(20)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!