剑指offer——面试题23:链表中环的入口节点
函数:
- ListNode* MeetingNode(ListNode* pHead)
- {
- if(pHead==nullptr)
- return nullptr;
- ListNode* quickNode=pHead;
- ListNode* slowNode=pHead;
- while(quickNode->m_pNext!=nullptr&&quickNode->m_pNext->m_pNext!=nullptr)
- {
- quickNode=quickNode->m_pNext->m_pNext;
- slowNode=slowNode->m_pNext;
- if(quickNode==slowNode)
- break;
- }
- if(quickNode!=slowNode)
- {
- return nullptr;
- }
- return slowNode;
- }
- ListNode* EntryNodeOfLoop(ListNode* pHead)
- {
- ListNode* meetingNode=MeetingNode(pHead);
- if(meetingNode==nullptr)
- return nullptr;
- int nodesInLoop=;
- ListNode* pTemp=meetingNode;
- while(pTemp->m_pNext!=meetingNode)
- {
- pTemp=pTemp->m_pNext;
- nodesInLoop++;
- }
- ListNode* quickNode=pHead;
- ListNode* slowNode=pHead;
- for(int i=;i<nodesInLoop;i++)
- quickNode=quickNode->m_pNext;
- while(slowNode!=quickNode)
- {
- quickNode=quickNode->m_pNext;
- slowNode=slowNode->m_pNext;
- }
- return slowNode;
- }
测试代码:
- #include"List.h"
- void Test(char* testName,ListNode* pHead,ListNode* expect)
- {
- cout<<testName<<":";
- ListNode* result=EntryNodeOfLoop(pHead);
- if(result==nullptr)
- {
- cout<<"No loop in the link list."<<endl;
- }
- else if(result==expect)
- {
- cout<<"Passed."<<endl;
- }
- else
- cout<<"Failed."<<endl;
- }
- void Test1_7()
- {
- ListNode* pNode1=CreateListNode();
- ConnectListNodes(pNode1,pNode1);
- Test("test1",pNode1,pNode1);
- ListNode* pNode2=CreateListNode();
- ListNode* pNode3=CreateListNode();
- ListNode* pNode4=CreateListNode();
- ListNode* pNode5=CreateListNode();
- ListNode* pNode6=CreateListNode();
- ConnectListNodes(pNode1,pNode2);
- ConnectListNodes(pNode2,pNode3);
- ConnectListNodes(pNode3,pNode4);
- ConnectListNodes(pNode4,pNode5);
- ConnectListNodes(pNode5,pNode6);
- ConnectListNodes(pNode6,pNode3);
- Test("test2",pNode1,pNode3);
- ConnectListNodes(pNode6,pNode6);
- Test("test3",pNode1,pNode6);
- Test("test4",nullptr,nullptr);
- ConnectListNodes(pNode6,nullptr);
- Test("test5",pNode1,nullptr);
- DestroyList(pNode1);//注意销毁所定义的指针和链表
- }
- int main()
- {
- Test1_7();
- return ;
- }
主要要销毁所定义的指针变量和链表。如果链表中存在环,则可以一个个节点去释放。
剑指offer——面试题23:链表中环的入口节点的更多相关文章
- 剑指offer(55)链表中环的入口节点
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析 1.一快一慢指针,先找到碰撞点. 2.然后碰撞点到入口节点的距离就是头结点到入口节点的距离. 具体原理可 ...
- 【剑指offer】面试题 23. 链表中环的入口节点
面试题 23. 链表中环的入口节点
- 【剑指Offer】55、链表中环的入口结点
题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 解题思路: 本题是一个比较典型的链表题目,难度适中.首先,对于大多人来说,看到这道题是比较开心的 ...
- 剑指offer 面试题 删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...
- 【剑指offer 面试题23】从上往下打印二叉树
思路: 没啥好说的,BFS. C++: #include <iostream> #include <queue> using namespace std; struct Tre ...
- 剑指offer面试题23:从上到下打印二叉树(树的层序遍历)
题目:从上往下打印出二叉树的每个节点,同一层的结点按照从左往右的顺序打印. 解题思路:二叉树的层序遍历,在打印一个节点的时候,要把他的子节点保存起来打印第一层要把第二层的节点保存起来, 打印第二层要把 ...
随机推荐
- networkX用法整
无向图,有向图,加权图等例子代码 [http://www.cnblogs.com/kaituorensheng/p/5423131.html#_label1] 数据分析学习笔记(三)-NetworkX ...
- Mosquitto 单向SSL配置
Mosquitto 单向SSL配置 摘自:https://blog.csdn.net/a_bcd_123/article/details/70167833 2017年04月14日 06:56:06 s ...
- 3.3.6-1 ArrayBlockingQueue简单分析
构造方法:public ArrayBlockingQueue(int capacity) { this(capacity, false); } public ArrayBlockingQueue(in ...
- [GO]简单的并发服务器
package main import ( "net" "fmt" "strings" ) func HandleConn(conn net ...
- 团体程序设计天梯赛L2-003 月饼 2017-03-22 18:17 42人阅读 评论(0) 收藏
L2-003. 月饼 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不 ...
- Java 理论与实践: 修复 Java 内存模型,第 2 部分(转载)
在 JSR 133 中 JMM 会有什么改变? 活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议.在本系列文章的 ...
- java学习(一)数据类型
一.java的安装及环境变量的配置 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...
- XE5应用开发支持的安卓设备
XE5应用开发支持的安卓设备 A.官方文档声明 RADStudio 支持Android设备的应用开发,android版本从2.3到4.3.x,ARMv7处理器,MEON支持.根据Embarcadero ...
- java-04流程控制语句
这里先简单介绍几种流程控制语句 包括if/if-else.switch语句 1.三大流程控制结构 所谓流程控制,就是说要控制程序的执行方式,根据不同的情况执行不同的代码,从而得到不同情况下的不同结果. ...
- .Net程序随系统开机启动(仿Foxmail托盘效果控制)
对于使.NET程序随系统开机启动,最常用的可能就是向在注册表中注册开机启动项,或是建立Windows服务,使程序随系统启动而启动.这里以WinForm程序为例,测试Demo分享,同时附上对于程序托盘的 ...