您的位置:首页 > 其它

判断一个链表是否存在环

2014-04-24 08:32 246 查看
Given a linked list, determine if it has a cycle in it.

解法一:设置一个非常大的数-----flag=0x3f3f3f3f,每次访问将节点中value改为flag,如果节点的值与flag相等则存在环,否则不存在环

/**

* 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) {

int flag=0x3f3f3f3f;

ListNode *cur=head;

if(cur==NULL)

return false;

while(cur!=NULL)

{

if(cur->val==flag)

return true;

cur->val=flag;

cur=cur->next;

}

return false;

}

};

解法二:用两个ListNode *型的指针,一个一次走一步,另一个一次走两步,这样若一个有n个节点的环,两个指针n次移步后,会相遇。

bool hasCycle(ListNode *head) {

ListNode *cur1=head;

ListNode *cur2=head;

while(cur2!=NULL&&cur1!=NULL)

{

cur1=cur1->next;

if(cur2->next==NULL)

return false;

cur2=cur2->next->next;

if(cur1==cur2)

return true;

}

return false;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: