141. 环形链表

141. 环形链表

解法一:所到之处,寸草不生

第一种解法自己写的,巧妙运用了链表的val,只要遍历过,就将节点的值设置为1e9,时间空间复杂度都达到了完美的统一(doge)

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if(head == NULL) return false;
        ListNode* cur = head;

        while(cur->next){
            cur->val = 1e9;
            if(cur->next->val == 1e9) return true;
            cur = cur->next;
            // if(cur->next == head) return true;
            // else{cur = cur->next;}    
        }
        return false;
    }
};
复制代码

看评论区还有将链表指向直接给改了的,只能说为了解题老本都豁出去了,hhh

还是用官方经典的做法吧

双指针

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        ListNode* fast = head;
        ListNode* slow = head;

        while(fast != nullptr && fast->next != nullptr) {
            fast = fast ->next->next;
            slow = slow->next;
            if(fast == slow)return true;
        }
        return false;
    }
};
复制代码

这里开辟的空间只有两个指针,空间复杂度为O(1).

posted @   luxiayuai  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示