博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer——面试题23:链表中环的入口节点
阅读量:6393 次
发布时间:2019-06-23

本文共 1470 字,大约阅读时间需要 4 分钟。

函数:

1 ListNode* MeetingNode(ListNode* pHead) 2 { 3     if(pHead==nullptr) 4         return nullptr; 5     ListNode* quickNode=pHead; 6     ListNode* slowNode=pHead; 7  8     while(quickNode->m_pNext!=nullptr&&quickNode->m_pNext->m_pNext!=nullptr) 9     {10         quickNode=quickNode->m_pNext->m_pNext;11         slowNode=slowNode->m_pNext;12         if(quickNode==slowNode)13             break;14     }15     if(quickNode!=slowNode)16     {17         return nullptr;18     }19     return slowNode;20 }21 22 ListNode* EntryNodeOfLoop(ListNode* pHead)23 {24     ListNode* meetingNode=MeetingNode(pHead);25     if(meetingNode==nullptr)26         return nullptr;27     int nodesInLoop=1;28     ListNode* pTemp=meetingNode;29     while(pTemp->m_pNext!=meetingNode)30     {31         pTemp=pTemp->m_pNext;32         nodesInLoop++;33     }34     ListNode* quickNode=pHead;35     ListNode* slowNode=pHead;36     for(int i=0;i
m_pNext;38 while(slowNode!=quickNode)39 {40 quickNode=quickNode->m_pNext;41 slowNode=slowNode->m_pNext;42 }43 return slowNode;44 }
View Code

测试代码:

1 #include"List.h" 2  3 void Test(char* testName,ListNode* pHead,ListNode* expect) 4 { 5     cout<
<<":"; 6 ListNode* result=EntryNodeOfLoop(pHead); 7 if(result==nullptr) 8 { 9 cout<<"No loop in the link list."<
View Code

主要要销毁所定义的指针变量和链表。如果链表中存在环,则可以一个个节点去释放。

转载于:https://www.cnblogs.com/acm-jing/p/10417991.html

你可能感兴趣的文章
嵌入式程序员应知道的0x10个基本问题
查看>>
Ubuntu 14.04下java开发环境的搭建--2--Eclipse的安装
查看>>
v-for循环中key的使用
查看>>
Java 门面模式 浅析
查看>>
[国家集训队]happiness 最小割 BZOJ 2127
查看>>
Zend Studio添加ThinkPHP代码提示方法
查看>>
JS事件委托或者事件代理原理以及实现
查看>>
[algothrim]URL相似度计算的思考
查看>>
windows 10 64位机器上 安装部署
查看>>
ios 输入框问题
查看>>
win7电脑蓝牙 耳机
查看>>
浮动css
查看>>
【观点】“另类”设计模式
查看>>
云计算里的安全:警惕云服务被恶意利用
查看>>
KDE发布四月份更新(4.6.2),与GNOME同祝
查看>>
vc设置文本框为只读状态
查看>>
Vue+DataTables warning:table id=xxxx -Cannot reinitialize DataTable.报错解决方法
查看>>
压力测试
查看>>
boost::timer
查看>>
bootstrap -- css -- 表格
查看>>