* (1)先判长度 0 直接 return 0;* (2)声明快慢指针;* (3)快到最后就结束,所以 while(fast < nums.length);* (4)一开始快慢重合,快慢值相等,让快++,所以 fast++;* (5)这里思考一下,假如所有元素都相等,fast 直接走到最后了;* (6)如果快慢值不相等(至少有两个值不相等,就要包含一些普遍情况了):...
经典解法就是用两个指针,一个每次前进两步,一个每次前进一步。如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。 booleanhasCycle(ListNode head){ ListNode fast, slow; fast = slow = head;while(fast !=null&& fast.next...
经典解法就是用两个指针,一个每次前进两步,一个每次前进一步。如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。 boolean hasCycle(ListNode head) { ListNode fast, slow; fast = slow = head; while(fast != null && fa...
所以,只要我们把快慢指针中的任一个重新指向 head,然后两个指针同速前进,k - m 步后就会相遇,相遇之处就是环的起点了。 3、寻找链表的中点 类似上面的思路,我们还可以让快指针一次前进两步,慢指针一次前进一步,当快指针到达链表尽头时,慢指针就处于链表的中间位置。 ListNode slow, fast; slow = fast = h...