C++ 算法之 是否为环形链表
来源:互联网 发布:shake it off 下载 编辑:程序博客网 时间:2024/05/02 02:44
如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。
bool IsCycleList(ListNode* pHead){if(pHead== NULL) return false;if (pHead->m_pNext == NULL){return false;}ListNode* pFastNode = pHead;ListNode* pSlowNode = pHead;//如果为偶数个,pFastNode->m_pNext->m_pNext为空;如果为奇数个,pFast->m_pNext为空;while(pFastNode->m_pNext != NULL && pFastNode->m_pNext->m_pNext != NULL){pFastNode = pFastNode->m_pNext->m_pNext;pSlowNode = pSlowNode->m_pNext;if (pSlowNode == pFastNode){break;}}if (pFastNode == NULL || pFastNode->m_pNext == NULL){return false;}else{return true;}}
完整代码测试:
// CycleList.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;struct ListNode {int m_nValue;ListNode* m_pNext;ListNode(int k):m_nValue(k),m_pNext(NULL){}};bool IsCycleList(ListNode* pHead){if(pHead== NULL) return false;if (pHead->m_pNext == NULL){return false;}ListNode* pFastNode = pHead;ListNode* pSlowNode = pHead;//如果为偶数个,pFastNode->m_pNext->m_pNext为空;如果为奇数个,pFast->m_pNext为空;while(pFastNode->m_pNext != NULL && pFastNode->m_pNext->m_pNext != NULL){pFastNode = pFastNode->m_pNext->m_pNext;pSlowNode = pSlowNode->m_pNext;if (pSlowNode == pFastNode){break;}}if (pFastNode == NULL || pFastNode->m_pNext == NULL){return false;}else{return true;}}int _tmain(int argc, _TCHAR* argv[]){ListNode* head = new ListNode(1);ListNode* Node1 = new ListNode(2);ListNode* Node2 = new ListNode(3);ListNode* Node3 = new ListNode(4);ListNode* Node4 = new ListNode(5);ListNode* Node5 = new ListNode(6);ListNode* Node6 = new ListNode(7);head->m_pNext = Node1;Node1->m_pNext = Node2;Node2->m_pNext = Node3;Node3->m_pNext = Node4;Node4->m_pNext = Node5;Node5->m_pNext = Node6;Node6->m_pNext = head;bool b = IsCycleList(head);cout<<b<<endl;getchar();return 0;}
1 0
- C++ 算法之 是否为环形链表
- 链表算法之环形链表插值
- 面试题四 C/C++面试秘笈 之判断链表是否存在环形链表问题-程序员面试题
- C判定是否为奇数的算法
- C语言实现环形链表
- 判断链表是否存在环形链表
- 数据结构——6 单链表是否是环形链表
- 约瑟夫环形算法 用c语言实现
- 二叉树转换为双向环形链表
- 第七周项目一C/C++数据结构之自建算法库——顺序环形队列
- 《算法(第四版)》 1.3.29 环形链表
- 环形链表
- 判断环形链表
- 环形链表
- 环形链表
- 数据结构:环形链表
- 【C#】是否为闰年
- C++算法之 判断是否为完全二叉树
- 使用Android NDK开发(一):Android NDK介绍(包括JNI的介绍)
- Oracle EBS ERP中月结年结的流程总结
- 14章类型信息--注册工厂---instandceof与Class的等价性--反射
- 根据 long long 类型的时间戳,来判断为 周几
- 第十六周项目4
- C++ 算法之 是否为环形链表
- QT xml文件转化lua table文件 工具
- Linux内核Crash分析
- Estimate in progress using
- Logistic Regression(逻辑回归)简介
- opencv2实现路线路牌检测_计算机视觉大作业2终版
- 黑马程序员-----Java代理机制的学习笔记
- Android异步加载图像小结
- 嵌入式 wget下载整个网站内容