判断链表是否有环---双指针法
2020-08-22 18:11
316 查看
//判断一个单向链表是否有环 //思路:设置双指针,一快一慢,若有环两个指针一定相遇 // 快指针pf每次走一步,以便于遍历所有结点 // 慢指针ps每次走两步,目的是遍历环中的每一个结点 #include <iostream> using namespace std; //链表结点 typedef struct ListNode { struct ListNode* next; }ListNode; bool loopList(ListNode* head) { ListNode* pf = head; ListNode* ps = head; if (pf == NULL || pf->next == NULL) { return false; } pf = pf->next->next; while (pf != ps) { //pf每次走两步,所以判断pf和pf的下一个节点是否为NULL if (pf == NULL || pf->next == NULL) { return false; } pf = pf->next->next; ps = ps->next; } return true; } int main() { ListNode* node1 = new ListNode; ListNode* node2 = new ListNode; ListNode* node3 = new ListNode; ListNode* node4 = new ListNode; ListNode* node5 = new ListNode; ListNode* node6 = new ListNode; node1->next = node2; node2->next = node3; node3->next = node4; node4->next = node5; node5->next = node6; //node6->next = NULL; node6->next = node3; bool ret = loopList(node1); if (ret) { cout << "YES" << endl; } else { cout << "NO" << endl; } system("pause"); return 0; }
相关文章推荐
- leetcode_234. Palindrome Linked List 判断单链表是否为回文串,快慢指针法找中间节点,反转单链表
- (1)判断链表中是否有环
- 【面试题】判断链表中是否有环
- 判断两个链表是否相交
- 判断两个链表是否相交及获得相交的第一个节点
- 判断链表是否存在环和判断两个链表是否相交
- 判断一个单向链表中是否存在环
- 怎样判断链表是否相交
- 编程判断两个链表是否相交
- 如何判断链表是否有环
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环)
- 如何判断链表是否有环
- Java代码 判断两个链表是否相交
- [Leetcode] Linked list cycle ii 判断链表是否有环
- 判断链表是否为回文结构(时间、空间复杂度有要求)
- Algorithm One Day One -- 判断链表是否有环(上)
- 编程之美--判断两个链表是否相交
- 判断两个链表是否相交
- 判断单链表是否为循环链表-----在有序链表中寻找中位数------使用快慢指针
- 算法:判断一个链表中是否有环