[LeetCode OJ] Linked List Cycle 解题报告

题目地址:https://oj.leetcode.com/problems/linked-list-cycle/

题意:判断一个链表是否自循环,不能开辟太大的内存

解题思路:其实我声明了变量。方法是在dfs的过程中将dfs过的节点的值改为INF,由节点的val是否为INF来判断是否遍历过。

#define INF 0x7fffffff
/**
 * 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) {
        return dfs(head);
    }
    bool dfs(ListNode *t){
        if(t == NULL) return 0;
        if(t->val == INF) return 1;
        int tmp = t->val;
        t->val=INF;
        bool flag = dfs(t->next);
        t->val = tmp;
        return flag;
    }
};

点赞