一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

面試不可不會(huì)的單鏈表反轉(zhuǎn)

 路人甲Java 2022-08-12 發(fā)布于北京

鏈表反轉(zhuǎn)是面試中??嫉囊坏李},這道題看起來(lái)簡(jiǎn)單,但是能一遍寫出 bug free 的代碼相當(dāng)不容易,本文主要提供遞歸和迭代兩種解題方法,供大家參考。

題目

 

 

 

舉栗

 為了便于理解,以 1->2->3->NULL 為栗子,如下圖示:

 

遞歸解法

鏈表具有天然的遞歸性,一個(gè)鏈表例如:1->2->3->NULL,可以看成以值為 1 的節(jié)點(diǎn)作為頭節(jié)點(diǎn)后面掛接一個(gè)更短的(以值為 2 的節(jié)點(diǎn)為頭節(jié)點(diǎn))的鏈表,即1->更短的鏈表(以值為2的節(jié)點(diǎn)作為頭節(jié)點(diǎn)),同理以值為2的節(jié)點(diǎn)作為頭節(jié)點(diǎn)后面也掛接一個(gè)更更短的鏈表(以值為3的節(jié)點(diǎn)作為頭節(jié)點(diǎn));依次類推,如下圖示。

 

 

 

 有了這樣的思考,鏈表反轉(zhuǎn)就可以先翻轉(zhuǎn)頭節(jié)點(diǎn)后面掛接的更短的鏈表,然后再在翻轉(zhuǎn)后的更短鏈表的后面掛接之前的頭節(jié)點(diǎn)。具體如下圖示:

 

 

 Show me the Code

// C語(yǔ)言版本
struct ListNode* reverseList(struct ListNode* head){
    /* 特判 */
    if (head == NULL || head->next == NULL) {
        return head;
    }
    
    /* 翻轉(zhuǎn)頭節(jié)點(diǎn)(節(jié)點(diǎn)值為 1 的節(jié)點(diǎn)) 后面掛接的鏈表(以節(jié)點(diǎn)值為 2 的節(jié)點(diǎn)作為頭節(jié)點(diǎn)) */
    /* 翻轉(zhuǎn)之后變成 3->2 */
    struct ListNode *node = reverseList(head->next); 
    /* 將頭節(jié)點(diǎn)(節(jié)點(diǎn)值為 1 的節(jié)點(diǎn))掛接在翻轉(zhuǎn)之后的鏈表的后面(也就是節(jié)點(diǎn)值為 2 的節(jié)點(diǎn)的后面) */     
    head->next->next = head; 
    /* 將尾節(jié)點(diǎn)的下一節(jié)點(diǎn)置空 */                            
    head->next = NULL;                               
    return node;
}

  

#python3 版本
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if not head or not head.next: return head
        node = self.reverseList(head.next)
        head.next.next = head;
        head.next = None;
        return node;

迭代(雙指針)解法

可以用雙指針來(lái)做,用一個(gè)指針 next 記錄當(dāng)前節(jié)點(diǎn)的后一節(jié)點(diǎn),另外一個(gè)指針 pre 記錄當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),如果當(dāng)前節(jié)點(diǎn)是頭節(jié)點(diǎn),則 pre 為空指針,還是以鏈表:1->2->3->NUL為栗子,具體如下圖示。

 

 

 

 

 

Show me the Code

// C語(yǔ)言版本
struct ListNode* reverseList(struct ListNode* head){
    /* 記錄當(dāng)前節(jié)點(diǎn)的前一節(jié)點(diǎn) */
    struct ListNode* pre = NULL; 
    while (head != NULL) {
        /* 記錄當(dāng)前節(jié)點(diǎn)的后一節(jié)點(diǎn) */
        struct ListNode* next = head->next;
        head->next = pre;
        pre = head;
        head = next;
    }
    return pre;
}

  

// go語(yǔ)言版本
func reverseList(head *ListNode) *ListNode {
    var pre *ListNode = nil
    for head != nil {
        next := head.Next
        head.Next = pre;
        pre = head
        head = next
    }
    return pre
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本中文字幕在线精品| 亚洲国产黄色精品在线观看| 亚洲一区二区三区在线中文字幕| 老司机精品视频在线免费看| 91一区国产中文字幕| 日本99精品在线观看| 嫩草国产福利视频一区二区| 日本熟妇熟女久久综合| 久热香蕉精品视频在线播放| 中国少妇精品偷拍视频| 高清在线精品一区二区| 国产精品内射婷婷一级二级| 国产一区二区三区四区免费| 一区二区三区人妻在线| 色欧美一区二区三区在线| 在线日本不卡一区二区| 日韩精品中文字幕亚洲| 中国一区二区三区人妻| 亚洲一区二区久久观看| 欧美日韩国产福利在线观看| 国内精品美女福利av在线| 国产色第一区不卡高清| 激情爱爱一区二区三区| 伊人久久青草地婷婷综合| 久久偷拍视频免费观看| 亚洲一区二区三区日韩91| 成人区人妻精品一区二区三区| 国产传媒一区二区三区| 香蕉尹人视频在线精品| 青草草在线视频免费视频| 亚洲少妇一区二区三区懂色| 欧美日韩免费观看视频| 国产成人精品午夜福利| 日本办公室三级在线观看| 国产精品日韩欧美第一页| 欧美一区二区在线日韩| 日韩精品免费一区三区| 中文字幕乱码一区二区三区四区| 好吊妞视频只有这里有精品| 在线观看国产成人av天堂野外| 欧美一本在线免费观看|