剑指offer面试题56 链表中环的入口节点(java实现)

来源:互联网 发布:清理后台的软件 编辑:程序博客网 时间:2024/05/10 10:03

解题思路:

1.首先找出链表中环内节点个数

2.设置两个指针p1和p2,p1先在链表上向前移动n步,然后两个指针以相同的速度向前移动,当两个指针相遇时,该节点即为环的入口节点。

public class Solution {class ListNode {int value;ListNode next = null;public ListNode(int value) {this.value = value;}}/**用于在环形链表中找到环中节点的数目 * @param pHead */public ListNode MettingNode(ListNode pHead) {if (pHead == null) {return null;}ListNode pSlow = pHead.next;if (pSlow == null) {return null;}//初始情况下,fast比slow块一个身位ListNode pFast = pSlow.next;while (pFast != null && pSlow != null) {if (pFast == pSlow) {return pFast;}pSlow = pSlow.next;pFast = pFast.next;if(pFast != null) {//每次在之前身位的基础上又多块一个身位,这样下去肯定能在环内追上pslow//单纯地只快一个身位是不可能追上的 pFast = pFast.next;}}return null;}public ListNode EntryNodeOfLoop(ListNode pHead)    {        ListNode mettingNode = MettingNode(pHead);        if (mettingNode == null) {        return null;        }                //在链表中存在环的条件下        //获取链表中环内节点的数目        int numberOfLoop = 1;        ListNode p = mettingNode.next;        while (p != mettingNode) {        numberOfLoop++;        p = p.next;        }                //两个指针p1和p2,指针p1先在链表上向前移动n步,然后两个指针以相同的速度向前移动        ListNode p1 = pHead;        ListNode p2 = pHead;                //先让指针p1在链表上移动n步        int step = 0;        while (step < numberOfLoop) {        p1 = p1.next;        step ++;        }                //两个指针以相同的速度移动,直到相遇为止则正好是环的入口节点        while (p1 != p2) {        p1 = p1.next;        p2 = p2.next;        }                return p1;                    }}


阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq号被冻结解封不了怎么办 2018qq自动进群怎么办 手机视频传到电脑倒着怎么办 qq群图片过期了怎么办 q号加不了群怎么办 q号加不了好友怎么办 q号被冻结了怎么办 qq群200人满了怎么办 畅聊之火消失了怎么办 手机版WPS打开文档空白怎么办 空白表格怎么打印不出来怎么办 微信朋友太少怎么办 js和CSS加载失败怎么办 熹妃q传密码忘了怎么办 苹果手机淘宝占用空间大怎么办 苹果相册储存空间不足怎么办 企业网银里的收款名单丢失怎么办 发邮件发错了怎么办 qq群成员满500了怎么办 为什么qq群查不到信息怎么办 tiger杯子油漆划掉了怎么办 手被油漆弄到了怎么办 被油漆弄到衣服怎么办 QQ发表情成问号怎么办 qq登不了微信怎么办 qq不能登录微信怎么办 qq号一年没用了怎么办 微信里别人可以看到我手机号怎么办 用手机号注册的微信换号后怎么办 微信群推送名片很多人加怎么办 志高制冷显示ff怎么办 百度账号手机号换了怎么办 别人盗取手机号的通讯录该怎么办 58简历看不到真实号码怎么办 淘宝更换手机号码说已注册怎么办 系统把qq冻结了怎么办 qq被永久冻结好友怎么办 群发不小心发错怎么办 qq群成员满了怎么办 qq知道密码没手机号验证怎么办 改房本上的名字怎么办