zoukankan      html  css  js  c++  java
  • 剑指Offer(Java版)第二十一题:链表中环的入口结点

    /*
    链表中环的入口结点
    */
    //思路,使用两个指针,一个快,一个慢,如果快的指针与慢的指针同时直到同一个节点,那么存在环。
    public class Class21 {
    //复杂问题分解成为几个简单问题(本题分为三步:找出环中任一结点;得到环的个数;找到入口结点)
    static class ListNode{
    int val;
    ListNode next = null;
    ListNode(int val){
    this.val = val;
    }
    }

    public ListNode findCircleNode(ListNode head){
    if(head == null){
    return null;
    }
    ListNode Slow = head;
    ListNode Fast = head;
    while(Fast != null){
    Fast = Fast.next;
    Slow = Slow.next;
    if(Fast != null){
    Fast = Fast.next;
    }
    if((Slow != null) && (Slow == Fast){
    return Slow;
    }
    }
    return null;
    }

    public ListNode theDoorOfCircle(ListNode head){
    ListNode findCircleNode = findCircleNode(head);
    if(findCircleNode == null){
    return null;
    }
    int numOfCircle = 1;
    ListNode newNode = findCircleNode.next;
    while(newNode != findCircleNode){
    numOfCircle++;
    newNode = newNode.next;
    }
    newNode = head;
    for(int i = 0; i < numOfCircle; i++){
    newNode = newNode.next;
    }
    ListNode newNode2 = head;
    while(newNode != newNode2){
    newNode = newNode.next;
    newNode2 = newNode.next;
    }
    return newNode;
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    }

    }

  • 相关阅读:
    单位根反演
    安卓第十三天笔记-服务(Service)
    安卓第十二天笔记-广播
    安卓第十一天笔记-Intent与inter-filter配置
    安卓第十天笔记-fragment
    安卓第九天笔记-Activity
    安卓第八天笔记--网络编程二
    安卓第七天笔记--网络编程一
    安卓第六天笔记--ListView
    安卓第五天笔记-对话框
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12463401.html
Copyright © 2011-2022 走看看