参考链接:
http://blog.youkuaiyun.com/lidalong0408/article/details/14103295
http://blog.youkuaiyun.com/sysucph/article/details/15378043
题目描述
Linked List Cycle
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
题目分析
判断链表是否有环,可使用快慢指针,如果有环,快指针一定可以追上慢指针。
总结
这个题在写是一个地方出错了,就是开始把快慢指针的初始值设为haed,进行while循环后先判断slow==fast,所以一定会返回。
就改为先移动指针再判断
while(fast->next != NULL && fast->next->next != NULL)
{
slow = slow->next;
fast = fast->next;
fast = fast->next;
if(fast == slow) //一开始都是head,所以不能直接判断,需要进行一次移动后再判断
return true;
}
示例代码
/*
编译环境CFree 5.0
*/
#include
#include
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(NULL){}
} ;
void printList(ListNode *head,char *name)
{
printf("%s\n",name);
while(head != NULL)
{
printf("%3d,",head->val);
head = head->next;
}
printf("\n");
}
class Solution {
public:
bool hasCycle(ListNode *head) {
if(head == NULL)
return false;
ListNode *slow = head;
ListNode *fast = head;
while(fast->next != NULL && fast->next->next != NULL)
{
slow = slow->next;
fast = fast->next;
fast = fast->next;
if(fast == slow) //一开始都是head,所以不能直接判断,需要进行一次移动后再判断
return true;
}
return false;
}
};
ListNode* listCreate(vector
&list, int arr[], int n)
{
if(n <= 0)
return NULL;
for(int i=0;i
next = &list[i];
head = head->next;
}
head = &list[0];
return head;
}
//有环
void test0()
{
vector
list;
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
ListNode *head = listCreate(list,arr, 10);
printList(head,"head");
list[9].next = &list[3];//制造一个环
Solution so;
if(so.hasCycle(head) == false)
printf("------------------------failed\n");
else
printf("------------------------passed\n");
}
//无环
void test1()
{
vector
list; int arr[10] = {0,1,2,3,4,5,6,7,8,9}; ListNode *head = listCreate(list,arr, 10); printList(head,"head"); //list[9].next = &list[3];//制造一个环 Solution so; if(so.hasCycle(head) == true) printf("------------------------failed\n"); else printf("------------------------passed\n"); } int main() { test0(); test1(); return 0; }
推荐学习C++的资料
C++标准函数库
在线C++API查询
推荐学习C++的资料
C++标准函数库
在线C++API查询