题解 | #牛牛队列成环#

牛牛队列成环

https://www.nowcoder.com/practice/38467f349b3a4db595f58d43fe64fcc7

知识点:

  • 单链表的环检测。
  • 哈希表的应用。

题意分析:

题目描述了一个农场里的牛队列,每头牛都有一个唯一的编号,编号范围在 [-105, 105] 内。每头牛都有一个指针指向它后面的一头牛,但有些顽皮的牛可能会指向它们前面的某一头牛,从而形成一个环。要求判断给定的链表是否有环。

时间复杂度:

假设链表的长度为 N。

在代码中,我们使用了一个哈希集合(unordered_set)来记录已经访问过的节点的编号。在最坏情况下,所有的节点都不构成环,我们需要遍历所有的节点一次。所以时间复杂度为 O(N)。

代码分析:

代码使用了一个 unordered_set 来记录已经访问过的节点的编号。然后,通过遍历链表的每个节点,检查当前节点的编号是否已经存在于集合中。如果存在,说明之前已经访问过,说明存在环,返回 true。否则,将当前节点的编号加入集合中,然后继续遍历下一个节点。最后,如果遍历完整个链表都没有发现环,则返回 false

class Solution {
public:
    bool hasCycle(ListNode* head) {
        std::unordered_set<int> visitedIndices;
        
        while (head) {
            if (visitedIndices.count(head->val)) {
                return true;
            }
            visitedIndices.insert(head->val);
            head = head->next;
        }
        
        return false;
    }

private:
    /**
     * 生成一个随机数作为链表节点的值
     */
    int generateRandomValue() {
        return rand() % 100;
    }

    /**
     * 创建一个带有指定值的链表节点
     */
    ListNode* createNodeWithValue(int value) {
        ListNode* node = new ListNode(value);
        return node;
    }
};

全部评论

相关推荐

09-24 18:19
已编辑
天津大学 Java
每次看到那些竞争激烈的岗位,我就觉得自己卷不动了。和我一样感到辛苦的人不少,大家都在说退出秋招。我也想放弃了,实在是撑不住了。
起一个响亮的名字吧____:天大爷不要放弃,我八月中旬开始投递的,到九月上旬都一直没有面试,我也一度觉得9本学历没有用😭但是这两周也开始陆陆续续约面了,也面了一些中厂。虽然腾讯阿里都是简历挂,虽然被字节面试官拷打嘲讽,但是我相信秋招只要一直积极准备总会有收获的,祝你我都拿到属于自己的最好的offer!😸
点赞 评论 收藏
分享
codemelo:终面的一般都是很高级别的,肯定难约😋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务