算法刻意练习-LeetCode实战09-环形链表

环形链表:

原题链接:环形链表

这道题我的思路是这样的:依次遍历链表的每一个节点,如果第一次访问,则将这个节点的数据域置为正无穷(INT_MAX)。

一直遍历,这时有两种情况:如果是环形链表,则一定会再次遍历到这个节点,即如果在遍历的过程中遇到数据域为INT_MAX的节点,证明有环,返回true;如果没有环,则一定会出现被遍历到的节点为NULL的情况,返回false。

代码如下:

/**
 * 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;
        while(head != NULL  && head->val != INT_MAX)
        {
            head->val = INT_MAX;
            head = head->next;
        }
        if(head == NULL) return false;
        else return true;     
    }
};

执行情况:
在这里插入图片描述
题外话:

真正的天才则是在自家领域安分守己的人。
——村上春树《世界尽头与冷酷仙境》

发布了16 篇原创文章 · 获赞 0 · 访问量 278

猜你喜欢

转载自blog.csdn.net/DZZ18803835618/article/details/104745341