1 /*
2 * Author :SJQ
3 *
4 * Time :2014-07-16-20.21
5 *
6 */
7 #include <iostream>
8 #include <cstdio>
9 #include <cstdlib>
10 using namespace std;
11
12 struct ListNode {
13 int val;
14 ListNode *next;
15 ListNode(int x) : val(x), next(NULL) {}
16 };
17
18 //利用快慢指针,链表有环,则快慢指针一定会相遇
19 bool hasCycle(ListNode *head)
20 {
21 if (!head|| !head->next)
22 return false;
23
24 ListNode *fast, *slow;
25 fast = slow = head;
26 while(fast)
27 {
28 if (!fast->next)
29 return false;
30
31 fast = fast->next->next;
32 slow = slow->next;
33
34 if (fast == slow)
35 {
36 return true;
37 }
38 }
39
40 return false;
41 }
42
43 int main()
44 {
45 freopen("input.txt", "r", stdin);
46 int n;
47 ListNode *head, *tail;
48
49 while(cin >>n)
50 {
51 int num;
52 for (int i = 0; i < n; ++i)
53 {
54 cin >> num;
55 ListNode *temp = (ListNode*)malloc(sizeof(ListNode));
56 temp->val = num;
57 temp->next = NULL;
58
59 if (i == 0)
60 {
61 head = temp;
62 tail = temp;
63 }
64 else
65 {
66 tail->next = temp;
67 tail = tail->next;
68 }
69
70 tail->next = NULL;
71 }
72
73 tail->next = head->next; //手动每次把最后一个节点和第二个节点连起来
74 bool flag = hasCycle(head);
75 if (flag)
76 cout << "has cycle!" << endl;
77 else
78 cout << "no cycle!" << endl;
79 tail = head;
80 for (int i = 0; i < n; ++i)
81
82 {
83 cout << tail->val << " ";
84 tail =tail->next;
85 }
86 cout << endl;
87 }
88
89 return 0;
90
91 }