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

链表中环的入口结点

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

分两步:第一步判断有没有环:条件是p!=null且p.next !=null这样p最后只会有两种情况,在链表的最末尾,与在链表的末尾空节点处。,一旦末尾节点的下一位为空p==null或者p就是null那么就说明没有环了。 第二步利用距离相等再走一遍相遇

 public class ListNode {
    int val;
    ListNode next = null;

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

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        if(pHead == null ){
            return null;
        }
        ListNode p = pHead,q = pHead;

        while (q != null && q.next != null ){
         
            p = p.next;
            q = q.next.next;
            if(p == q){
            break;
         }
        }
        //不存在环返回空
        if(q == null || q.next == null){
            return null;
        }
        //两者的相遇点到入口点的位置刚等于头节点到入口的位置,
        //则再设一个指针从头节点与当前指针相同速度往前走相遇即可
        ListNode start = pHead;
        while(start != p){
            p = p.next;
            start = start.next;
        }
        return p;
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
03-12 13:51
南昌大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务