牛客-NC4

141. 环形链表(easy)


方法一:快慢指针(最优解)

思路:定义fast、slow即快慢双指针,移动步数分别为2和1,如果链表存在环,那它们必然会相遇。当快指针fast到达尾部时,表示并不存在环路。

/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */
public class Solution {
   
    public boolean hasCycle(ListNode head) {
   
        if (head == null || head.next == null) {
   
            return false;
        }
        ListNode slow = head, fast = head.next;
        while (fast != slow) {
   
            if (fast == null || fast.next == null) {
   
                return false;
            }
            fast = fast.next.next;
            slow = slow.next; 
        }
        return true;
    }
}

时间复杂度: O(N), 因为需要遍历一遍链表。
空间复杂度: O(1), 仅需要两个指针所对应的额外存储空间。
总结:本题考频极高,快慢指针在链表问题上的应用十分广泛,还需要加大训练强度!

全部评论

相关推荐

object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务