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

本文共 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

你可能感兴趣的文章
spring框架学习(五)注解
查看>>
mysql 查询缓存配置和查看
查看>>
水王(课堂作业)
查看>>
linux 新添加的硬盘格式化并挂载到目录下
查看>>
学习指引
查看>>
CF&&CC百套计划2 CodeChef December Challenge 2017 Total Diamonds
查看>>
JAVA入门学习: 方法参数的传递(函数传参问题)
查看>>
补第一阶段冲刺站立会议7(应发表日期5月19日)
查看>>
【剑指offer】08二叉树的下一个节点,C++实现
查看>>
局域网络ping不通
查看>>
面向对象如何编写
查看>>
「视频直播技术详解」系列之二:处理
查看>>
zw版【转发·台湾nvp系列Delphi例程】HALCON SetLineStyle1
查看>>
Bzoj4710 [Jsoi2011]分特产
查看>>
pat甲级题目1001 A+B Format详解
查看>>
电话拨号示例
查看>>
day12-迭代器
查看>>
HTML5 <script>元素async,defer异步加载
查看>>
poj2299--归并排序求解逆序对
查看>>
About Common Crypto
查看>>