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

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

题目描述:

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

 

思路分析:

这道题首先需要判断链表是否存在环,很快就能想到用快慢指针来判断。

由于快慢指针的相遇位置并不一定为链表环的入口结点,需要进一步判断。这里参考了一个博客 https://www.cnblogs.com/likeio/p/3593686.html ,由于快指针和慢指针相遇时,快指针一定比慢指针多走了n(n=1, 2, ...)个环,可以通过列对应关系得知,在已知有环的情况下,两个指针分别以头结点和相遇结点为起点,步长为1前进,一定会在环的入口结点相遇。

需要注意是,在找入口结点时,首先需要判断头结点和相遇结点是否相等,再进行后续判断,否则对于头结点即为入口结点的情况会遗漏。

 

代码:

1 /* 2 struct ListNode { 3     int val; 4     struct ListNode *next; 5     ListNode(int x) : 6         val(x), next(NULL) { 7     } 8 }; 9 */10 class Solution {11 public:12     ListNode* EntryNodeOfLoop(ListNode* pHead)13     {14         if(pHead==nullptr)15             return nullptr;16         ListNode* walker;17         ListNode* runner;18         walker = pHead;19         runner = pHead;20         while(walker!=nullptr && runner!=nullptr)21         {22             walker = walker->next;23             if(runner->next==nullptr)24                 return nullptr;25             else26                 runner = runner->next->next;27             if(runner==walker)28                 break;29         }30         if(walker == runner)31         {32             walker = pHead;33             while(walker!=nullptr && runner!=nullptr)34             {35                 if(runner==walker)36                     break;37                 walker = walker->next;38                 runner = runner->next;39             }40             if(walker==runner)41                 return walker;42             else43                 return nullptr;44         }45         else46             return nullptr;47     }48 };

 

转载于:https://www.cnblogs.com/LJ-LJ/p/11061399.html

你可能感兴趣的文章
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
程序集的混淆及签名
查看>>
判断9X9数组是否是数独的java代码
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>