牛客-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), 仅需要两个指针所对应的额外存储空间。
总结:本题考频极高,快慢指针在链表问题上的应用十分广泛,还需要加大训练强度!

全部评论

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
赏个offer求你了:友塔HR还专门加我告诉我初筛不通过😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务