计蒜客 难题题库 176 判断链表是否有环


有一个链表,我们需要判断链表中是否存在环。有环则输出true,否则输出false。

输入有多行,每行为由空格分隔的两个整数m和n,m是当前结点的数据,n代表当前结点的指针域指向第n个结点。

n存在四种情形:
①为-1,代表该结点的指针域指向NULL,输入结束;
②指向该结点之前的结点,如第3个结点的指针域指向n = 2的结点;
③指向自己,如第3个结点的指针域指向n = 3的结点;
④指向其直接后继结点,如第3个结点的指针域指向n = 4的结点,不能指向n = 5的结点。


当输入为:
1 2
2 3
3 -1
时,代表:第1个结点的数据为1,指向第2个结点;第2个结点的数据为2,指向第3个结点;第3个结点的数据为3,指向NULL,输入结束。

样例1

输入:

1 2
3 3
4 2
5 -1

输出:

true


#include<iostream>
#include<vector>
using namespace std;

int main(){
    vector<int> next(1, -1);
    int m, n;
    while(cin >> m >> n){
        next.push_back(n);
    }
    int p = next[1];
    int q = next[1];
    while(q != -1 && next[q] != -1 && next[next[q]] != -1){
        q = next[next[q]];
        p = next[p];
        if(p == q){
            cout << "true" << endl;
            return 0;
        }
    }
    cout << "false" << endl;
    return 0;
}


你可能感兴趣的:(OJ,计蒜客)