环形链表:
原题链接:环形链表
这道题我的思路是这样的:依次遍历链表的每一个节点,如果第一次访问,则将这个节点的数据域置为正无穷(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;
}
};
执行情况:
题外话:
真正的天才则是在自家领域安分守己的人。
——村上春树《世界尽头与冷酷仙境》