成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

單鏈表的操作 Java

bergwhite / 1548人閱讀

摘要:單鏈表的反轉(zhuǎn)頭插法兩個(gè)指針,表示的后一個(gè)節(jié)點(diǎn),表示的前一個(gè)節(jié)點(diǎn),都作為臨時(shí)節(jié)點(diǎn)先把節(jié)點(diǎn)指向后面節(jié)點(diǎn)的指針保存起來,則此時(shí)節(jié)點(diǎn)和節(jié)點(diǎn)值和指針是相同的指向前一個(gè)節(jié)點(diǎn)與進(jìn)行右移,遞歸斜體文字鏈表的倒數(shù)第個(gè)節(jié)點(diǎn)雙指針解決先走步,然后開始走,走到結(jié)尾

單鏈表的反轉(zhuǎn)

頭插法
兩個(gè)指針,next 表示 head 的后一個(gè)節(jié)點(diǎn),pre 表示 head 的前一個(gè)節(jié)點(diǎn),都作為臨時(shí)節(jié)點(diǎn)
先把 head 節(jié)點(diǎn)指向后面節(jié)點(diǎn)的指針保存起來 next = head.next ,則此時(shí) next 節(jié)點(diǎn)和 2 節(jié)點(diǎn)值和指針是相同的
head 指向前一個(gè)節(jié)點(diǎn) head.next = pre
pre 與 head 進(jìn)行右移 pre = head,head = next

public static ListNode ReverseList(ListNode head) {
    ListNode pre = null;
    ListNode next = null;
    if (head == null || head.next == null){
        return head;
    }
    while (head != null){
        next = head.next;
        head.next = pre;
        pre = head;
        head = next;
    }
    return pre;
}
遞歸
*斜體文字*public static ListNode ReverseListStack(ListNode head){
    if (head == null || head.next == null){
        return head;
    }
    ListNode node = ReverseListStack(head.next);
    head.next.next = head;
    head.next = null;
    return node;
}

鏈表的倒數(shù)第 K 個(gè)節(jié)點(diǎn)

1.雙指針解決
2.fast 先走K步,然后 low 開始走,fast 走到結(jié)尾的時(shí)候 low 則指向倒數(shù)第 K 個(gè)節(jié)點(diǎn)
3.主要 異常情況,K < 0 ,K > len(List)

public static ListNode getKNode(ListNode head,int k){
    if (head == null || k < 0){
        return null;
    }
    ListNode pre = head;
    ListNode next = head;
    for (int l = 0; l < k; l++) {
        if (next != null) {
            next = next.next;
        }else {
            return null;
        }
    }
    while (next != null){
        pre = pre.next;
        next = next.next;
    }
    return pre;
}

鏈表是否有環(huán)、環(huán)的入口

1.快慢指針,快指針每次走兩步,慢指針每次走一步
2.若在遍歷鏈表的過程中,出現(xiàn) 快指針指向的節(jié)點(diǎn)等于慢指針指向的節(jié)點(diǎn),說明鏈表有環(huán),并且相遇的點(diǎn)一定在環(huán)中(不然不可能相遇)
3.設(shè)定 鏈表頭到環(huán)入口的距離為 x ,環(huán)入口到相遇點(diǎn)的距離為 a,環(huán)的總長度為 c,環(huán)相遇點(diǎn)到入口的距離為 b,則 a+b = c
4.假設(shè)此時(shí)快慢指針在環(huán)內(nèi)相遇,那么
慢指針走過的距離 Step(low) = x + m * c + a (m為慢指針走過的圈數(shù)) ①
快指針走過的距離 Step(fast) = x + n * c + a (n為快指針走過的圈數(shù)) ②
Step(fast) = 2 * Step(low)③
5.根據(jù)①②③,得到 x = c (n - 2 m - 1)+ b ,也就是說鏈表頭到環(huán)入口的距離 x 等于 環(huán)的長度 c 的倍數(shù) + b
6.相遇時(shí),此時(shí)若將慢(快)其中一個(gè)放到鏈表開頭,然后開頭的指針和環(huán)中的指針一起一步步走,那么開頭的指針走 x 步時(shí),環(huán)中的指針將走 k 圈 + b 步,此時(shí) 兩指針再次相遇,并且相遇點(diǎn)位環(huán)入口點(diǎn),即為所求

public static ListNode getCircleroot(ListNode head){
    if (head == null || head.next == null){
        return null;
    }
    ListNode slow = head;
    ListNode fast = head;
    while (fast != null && fast.next != null){
        slow = slow.next;
        fast = fast.next.next;
        if (slow == fast){
            // 相遇時(shí) 終止循環(huán)
            break;
        }
    }
    if (fast != slow){
        return null;
    }
    fast = head;  // 將其中一個(gè)指針指向開頭
    while (fast != slow){
        fast = fast.next;
        slow = slow.next;
    }
    // 再次相遇時(shí)即為環(huán)入口點(diǎn)
    return fast;
}

歡迎加入學(xué)習(xí)交流群569772982,大家一起學(xué)習(xí)交流。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70521.html

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】Java語言描述-單鏈表的基本操作

    摘要:單鏈表是數(shù)據(jù)結(jié)構(gòu)中以動(dòng)態(tài)結(jié)構(gòu)存儲(chǔ)的線性結(jié)構(gòu),在語言中,一般用本類對(duì)象引用的方式在內(nèi)存中將一組相同類型的對(duì)象存儲(chǔ),熟悉單鏈表的基本操作有助于靈活解決此類算法問題。 單鏈表是數(shù)據(jù)結(jié)構(gòu)中以動(dòng)態(tài)結(jié)構(gòu)存儲(chǔ)的線性結(jié)構(gòu),在Java語言中,一般用本類對(duì)象引用的方式在內(nèi)存中將一組相同類型的對(duì)象存儲(chǔ),熟悉單鏈表的基本操作有助于靈活解決此類算法問題。 1.單鏈表中的節(jié)點(diǎn)可以用節(jié)點(diǎn)類型描述如下: public...

    sevi_stuo 評(píng)論0 收藏0
  • 自己動(dòng)手寫一個(gè)單鏈

    摘要:鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的線性表將采用一組任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。三單向鏈表的實(shí)現(xiàn)下面的程序分別實(shí)現(xiàn)了線性表的初始化獲取線性表長度獲取指定索引處元素根據(jù)值查找插入刪除清空等操作。 文章有不當(dāng)之處,歡迎指正,如果喜歡微信閱讀,你也可以關(guān)注我的微信公眾號(hào):好好學(xué)java,獲取優(yōu)質(zhì)學(xué)習(xí)資源。 一、概述 單向鏈表(單鏈表)是鏈表的一種,其特點(diǎn)是鏈表的鏈接方向是單向的,對(duì)鏈表的訪問要通過順序讀...

    岳光 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

bergwhite

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<