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

天涯浪子 提交于 2020-03-09 10:44:19

环形链表:

原题链接:环形链表

这道题我的思路是这样的:依次遍历链表的每一个节点,如果第一次访问,则将这个节点的数据域置为正无穷(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;     
    }
};

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

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!