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

链表中环的入口结点

http://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

链表中环的入口结点

描述

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

输入描述:

输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表
##返回值描述:
返回链表的环的入口结点即可。而我们后台程序会打印这个节点

思路

使用快慢指针判断是否有环,快慢指针相遇则证明有环。有环以后从头开始创建一个新指针,和慢指针一起走,相遇的位置即入口位置。

 public ListNode EntryNodeOfLoop(ListNode pHead) {
        //快慢指针
        ListNode fastNode = pHead;
        ListNode slowNode = pHead;
        ListNode inNode = null;
        while (slowNode.next != null) {
            fastNode = fastNode.next.next;
            slowNode = slowNode.next;
            if (fastNode == slowNode) {
                inNode = pHead;
                //有环
                while (true) {
                    if (inNode == slowNode) {
                        //入口
                        break;
                    }
                    inNode = inNode.next;
                    slowNode = slowNode.next;
                }
            break;
            }
        }
        return inNode;
    }
    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }
全部评论

相关推荐

11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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