最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java如何確定一個(gè)鏈表有環(huán)及入口節(jié)點(diǎn)

 更新時(shí)間:2021年04月08日 11:57:08   作者:沉默著忍受  
這篇文章主要介紹了java如何確定一個(gè)鏈表有環(huán)及入口節(jié)點(diǎn),想了解數(shù)據(jù)結(jié)構(gòu)的同學(xué)可以參考下

如何確定一個(gè)鏈表有環(huán),入口節(jié)點(diǎn)是什么?

1.首先定義一個(gè)單鏈表;

var ,next,是單鏈表中的屬性,分別表示節(jié)點(diǎn)值和下一個(gè)節(jié)點(diǎn)的指向;
代碼如下:

//定義一個(gè)鏈表
  class  List{
    public  int var;
    public  List next;
//有參構(gòu)造
    public List(int var) {
        this.var = var;
    }
//無參構(gòu)造
    public List() {

    }
    //創(chuàng)建一個(gè)帶環(huán)的鏈表
    public  List Create(){
        List a = new List(1);
        List b = new List(2);
        List c = new List(3);
        List d = new List(4);
        List e = new List(5);
        List f = new List(6);
        a.next = b;
        b.next =c;
        c.next = d;
        d.next =e;
        e.next = f;
        f.next =d;
        return  a;
    }

2.編寫判斷是否存在環(huán)

如果存在,則返回這個(gè)節(jié)點(diǎn),如果不存在則返回null,定義快慢指針,如果快的追上了慢的指針,那么這個(gè)鏈表必存在環(huán),如果沒有追上,或者都為null,那么這個(gè)鏈表沒有環(huán);
代碼如下:

//判斷是否有環(huán),并找到相遇的節(jié)點(diǎn)
public  List MeetingNode(List node){
    List slow = new List();
    List fast = new List();
    if(node==null) return  null;
    slow = node.next;
    if(slow==null) return  null;
    fast=slow.next;
    while (fast!=null && slow!=null){
        if (fast==slow){
            return fast; //fast追上了slow,確定是一個(gè)有環(huán)的鏈表;
        }
        slow = slow.next;
        fast = fast.next;
        if(fast!=null){
            fast = fast.next;
        }
    }
   return null;
}

3.尋找入口節(jié)點(diǎn)

先讓快指針先走環(huán)的節(jié)點(diǎn)的個(gè)數(shù)步,在讓慢指針開始走,如果兩個(gè)指針相遇的話,那么相遇的節(jié)點(diǎn)必然是環(huán)的入口節(jié)點(diǎn)
代碼如下:

  public  List Enterdear(List node){
        if(node==null) return null;
        if(MeetingNode(node)==null) return null;
        int count =1;
        List res2;
        List res1 = MeetingNode(node);
        while (res1.next!=MeetingNode(node)){
            res1 = res1.next;
            count++;
        }
        res1 = node;
        for(int i = 0;i<count;i++){
            res1 =res1.next;
        }
        res2 = node;
        while (res1!=res2 && res1!=null && res2!=null){
            res1 = res1.next;
            res2 = res2.next;
        }
        return res1;
    }
}

main函數(shù)測試;

ublic class Deom {

    public static void main(String[] args) {
       List SB = new List();
       List res = SB.Create();
       List dear= SB.Enterdear(res);
       System.out.println(dear.var);

    }


}

以上就是java如何確定一個(gè)鏈表有環(huán)及入口節(jié)點(diǎn)的詳細(xì)內(nèi)容,更多關(guān)于java鏈表及入口節(jié)點(diǎn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用Spring Session和redis對(duì)Session進(jìn)行共享詳解

    利用Spring Session和redis對(duì)Session進(jìn)行共享詳解

    這篇文章主要給大家介紹了關(guān)于利用Spring、Session和redis對(duì)Session進(jìn)行共享的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng)

    centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng)

    這篇文章主要介紹了centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • SpringBoot集成Prometheus實(shí)現(xiàn)監(jiān)控的過程

    SpringBoot集成Prometheus實(shí)現(xiàn)監(jiān)控的過程

    這篇文章主要介紹了SpringBoot集成Prometheus實(shí)現(xiàn)監(jiān)控,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Spring基于AspectJ的AOP開發(fā)案例解析

    Spring基于AspectJ的AOP開發(fā)案例解析

    這篇文章主要介紹了Spring的基于AspectJ的AOP開發(fā),AspectJ是一個(gè)基于Java語言的AOP框架,使用AspectJ需要導(dǎo)入Spring?AOP和AspectJ相關(guān)jar包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Kotlin 泛型詳解及簡單實(shí)例

    Kotlin 泛型詳解及簡單實(shí)例

    這篇文章主要介紹了 Kotlin 泛型詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • java為何不能多繼承的原因詳解

    java為何不能多繼承的原因詳解

    多重繼承是一個(gè)子類從多個(gè)父類中繼承屬性和方法。C++, Common Lisp是時(shí)下支持多重繼承的流行語言。那java為何不能多繼承呢,下面小編帶大家來一起學(xué)習(xí)一下吧
    2019-06-06
  • 如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類

    如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類

    這篇文章主要介紹了如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring+MyBatis實(shí)現(xiàn)數(shù)據(jù)讀寫分離的實(shí)例代碼

    Spring+MyBatis實(shí)現(xiàn)數(shù)據(jù)讀寫分離的實(shí)例代碼

    本篇文章主要介紹了Spring+MyBatis實(shí)現(xiàn)數(shù)據(jù)讀寫分離的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 關(guān)于Java如何用好線程池的方法分享(建議收藏)

    關(guān)于Java如何用好線程池的方法分享(建議收藏)

    這篇文章主要來和大家分享幾個(gè)關(guān)于Java如何用好線程池的建議,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06
  • SpringBoot操作Redis三種方案全解析

    SpringBoot操作Redis三種方案全解析

    這篇文章主要介紹了SpringBoot操作Redis三種方案全解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

手机| 花莲县| 信宜市| 焉耆| 黄龙县| 隆林| 三河市| 扎兰屯市| 资中县| 塔河县| 岑巩县| 肥乡县| 乐都县| 大冶市| 青浦区| 绥宁县| 宝应县| 固始县| 浦东新区| 河池市| 连州市| 利津县| 延安市| 大渡口区| 梁山县| 平昌县| 民丰县| 濮阳市| 浮山县| 宣城市| 泰安市| 登封市| 南江县| 巴中市| 合山市| 白朗县| 二连浩特市| 建始县| 安宁市| 钦州市| 陆良县|