成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

單鏈表的操作 Java

bergwhite / 1608人閱讀

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

單鏈表的反轉(zhuǎn)

頭插法
兩個指針,next 表示 head 的后一個節(jié)點,pre 表示 head 的前一個節(jié)點,都作為臨時節(jié)點
先把 head 節(jié)點指向后面節(jié)點的指針保存起來 next = head.next ,則此時 next 節(jié)點和 2 節(jié)點值和指針是相同的
head 指向前一個節(jié)點 head.next = pre
pre 與 head 進行右移 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 個節(jié)點

1.雙指針解決
2.fast 先走K步,然后 low 開始走,fast 走到結(jié)尾的時候 low 則指向倒數(shù)第 K 個節(jié)點
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é)點等于慢指針指向的節(jié)點,說明鏈表有環(huán),并且相遇的點一定在環(huán)中(不然不可能相遇)
3.設定 鏈表頭到環(huán)入口的距離為 x ,環(huán)入口到相遇點的距離為 a,環(huán)的總長度為 c,環(huán)相遇點到入口的距離為 b,則 a+b = c
4.假設此時快慢指針在環(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.相遇時,此時若將慢(快)其中一個放到鏈表開頭,然后開頭的指針和環(huán)中的指針一起一步步走,那么開頭的指針走 x 步時,環(huán)中的指針將走 k 圈 + b 步,此時 兩指針再次相遇,并且相遇點位環(huá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){
            // 相遇時 終止循環(huán)
            break;
        }
    }
    if (fast != slow){
        return null;
    }
    fast = head;  // 將其中一個指針指向開頭
    while (fast != slow){
        fast = fast.next;
        slow = slow.next;
    }
    // 再次相遇時即為環(huán)入口點
    return fast;
}

歡迎加入學習交流群569772982,大家一起學習交流。

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/70521.html

相關文章

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

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

    sevi_stuo 評論0 收藏0
  • 自己動手寫一個單鏈

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

    岳光 評論0 收藏0

發(fā)表評論

0條評論

bergwhite

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<