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

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,有就按我之前的办法输出结点就好了,果然成功了。

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

全部评论

相关推荐

一线城市私企 控制算法工程师、机电系统设计师 18-20万元/年
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务