有一个链表,我们需要判断链表中是否存在环。有环则输出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;
}