题解 | 链表中环的入口结点

import java.util.*;
/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        ListNode tmp = new ListNode(0);
        ListNode slow = pHead;
        int i = 0;
        ListNode quick = pHead;
        int j = 0;
        if (slow == null || slow.next == null || slow.next.next == null){
            return null;
        }
        while(quick.next.next != slow.next){
            if (slow.next == null || quick.next==null || quick.next.next == null){
                return null;
            }
            slow = slow.next;
            quick = quick.next.next;
        }
        while(pHead.next != null){
            tmp.next = pHead;
            pHead = pHead.next;
            tmp.next.next = null;
        }
        
        return pHead;

    }
}

我的思路很简单,一开始就想到怎么获得节点,但是没想到如何判断有没有环。粗略了看了题解用快慢指针,就自己想了一下快慢指针怎么做,在草稿上用示例画了一下发现快慢指针的差值-1为环的大小,但是得到环的长度我仍然无法判断结点第一个结点位置。但是我想到至少可以用快慢指针来判断有没有环,没有输出null,有就按我之前的办法输出结点就好了,果然成功了。

另外双指针我直接想数学解释一下子没想通,还是对着例子画了几圈才发现规律。遇到问题时还是直接画个图会更直观一些

全部评论

相关推荐

07-01 17:14
中北大学 Java
兄弟们是真是假
牛客46374834...:我在boss上投java岗从来没成功过
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 11:47
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务