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

資訊專欄INFORMATION COLUMN

LeetCode:206. 反轉(zhuǎn)鏈表

wenshi11019 / 1302人閱讀

摘要:示例輸入輸出進(jìn)階你可以迭代或遞歸地反轉(zhuǎn)鏈表。可以設(shè)置一個指針,指向,保證后續(xù)的操作然后將,往前挪動,當(dāng)然還有,直到為空,這時指向反轉(zhuǎn)后鏈表的頭結(jié)點(diǎn)。接下來考慮遞歸結(jié)束的條件非常顯然,子鏈表只有一個節(jié)點(diǎn)是遞歸結(jié)束,直接返回該節(jié)點(diǎn)。

本文來自 SoulOH 的CSDN 博客 ,原文地址請點(diǎn)擊:https://blog.csdn.net/SoulOH/...
題目:
反轉(zhuǎn)一個單鏈表。

示例:

輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL

進(jìn)階:
你可以迭代或遞歸地反轉(zhuǎn)鏈表。你能否用兩種方法解決這道題?

解答:

迭代方式:

首先判斷鏈表是不是空的,如果是空的,直接返回null;

對于鏈表:


放兩個指針p1, p2:


不能直接將p2 -> next指向p1,否則鏈表會斷掉。


可以設(shè)置一個tmp指針,指向 p2 -> next,保證后續(xù)的操作:


然后將p1,p2往前挪動,當(dāng)然還有tmp,直到p2為空,這時p1指向反轉(zhuǎn)后鏈表的頭結(jié)點(diǎn)。

最后一次:


剛好結(jié)束的時候:


完成了?

不。好像有一點(diǎn)不對勁兒,還多了一個1 -> 2的指針,少了一個null(1 -> null)。正巧head還在,通過head -> next訪問多余的指針,指向null(其實(shí)一開始就可以這么干的。)

實(shí)現(xiàn)代碼:

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    //迭代
    if (head == null || head.next == null) return head;
    var p1 = head;
    var p2 = head.next;
    p1.next = null;
    while (p2 !== null) {
        var temp = p2.next;
        p2.next = p1;
        p1 = p2;
        p2 = temp;
    }
    return p1;
};
遞歸方式:

我們可以從另一個角度考慮這件事:

同樣地,對于這樣一個鏈表:


我們要反轉(zhuǎn)它,其實(shí)可以

然后我們當(dāng)作這個子鏈表已經(jīng)反轉(zhuǎn)完成:


而我們需要的是:


于是我們可以將上上張圖的head.next.next = head:像是這樣:


然而僅僅這樣是不夠的,鏈表到現(xiàn)在有一個明顯的環(huán),我們要把這個環(huán)去掉:

令head.next = null即可。


完成。

接下來考慮遞歸結(jié)束的條件:非常顯然,子鏈表只有一個節(jié)點(diǎn)是遞歸結(jié)束,直接返回該節(jié)點(diǎn)。

當(dāng)然,這個可以和一開始的空值處理(空鏈表的處理)寫到一起。

下面是具體實(shí)現(xiàn):

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    //遞歸
    if (head == null || head.next == null) return head;
    var res = reverseList(head.next);
    head.next.next = head;
    head.next = null;
    return res;
    
};

本文來自 SoulOH 的CSDN 博客 ,原文地址請點(diǎn)擊:https://blog.csdn.net/SoulOH/...

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

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

相關(guān)文章

  • LeetCode 之 JavaScript 解答第206題 —— 反轉(zhuǎn)鏈表(Reverse Link

    摘要:算法思路兩種方法一般反轉(zhuǎn)遞歸法一般解決定義三個指針,分別為,存儲當(dāng)前結(jié)點(diǎn),指向反轉(zhuǎn)好的結(jié)點(diǎn)的頭結(jié)點(diǎn),存儲下一結(jié)點(diǎn)信息。遞歸法重點(diǎn)分析先確定終止條件當(dāng)下一結(jié)點(diǎn)為時,返回當(dāng)前節(jié)點(diǎn)判斷當(dāng)前的鏈表是否為遞歸找到尾結(jié)點(diǎn),將其存儲為頭結(jié)點(diǎn)。 Time:2019/4/23Title: Reverse Linked ListDifficulty: EasyAuthor: 小鹿 題目:Reverse...

    zhangfaliang 評論0 收藏0
  • LeetCode 206反轉(zhuǎn)鏈表 Reverse Linked List

    摘要:反轉(zhuǎn)一個單鏈表。示例輸入輸出進(jìn)階你可以迭代或遞歸地反轉(zhuǎn)鏈表。你能否用兩種方法解決這道題解題思路每次遍歷到最后一位取節(jié)點(diǎn)這種方法就算了時間復(fù)雜度太高。從鏈表末尾向頭部逐個分離節(jié)點(diǎn),并將節(jié)點(diǎn)添加到新鏈表的末尾。與迭代法原理相似。 反轉(zhuǎn)一個單鏈表。 Reverse a singly linked list. 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2...

    Gilbertat 評論0 收藏0
  • LeetCode 206反轉(zhuǎn)鏈表 Reverse Linked List

    摘要:反轉(zhuǎn)一個單鏈表。示例輸入輸出進(jìn)階你可以迭代或遞歸地反轉(zhuǎn)鏈表。你能否用兩種方法解決這道題解題思路每次遍歷到最后一位取節(jié)點(diǎn)這種方法就算了時間復(fù)雜度太高。從鏈表末尾向頭部逐個分離節(jié)點(diǎn),并將節(jié)點(diǎn)添加到新鏈表的末尾。與迭代法原理相似。 反轉(zhuǎn)一個單鏈表。 Reverse a singly linked list. 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2...

    heartFollower 評論0 收藏0
  • LeetCode 61:旋轉(zhuǎn)鏈表 Rotate List

    摘要:給定一個鏈表,旋轉(zhuǎn)鏈表,將鏈表每個節(jié)點(diǎn)向右移動個位置,其中是非負(fù)數(shù)。按上述思路解,與旋轉(zhuǎn)數(shù)組那道題大同小異,來介紹另一種很簡單高效的方法。只需在第個節(jié)點(diǎn)之后切斷,首尾連接即可。另外可能大于鏈表長度,應(yīng)當(dāng)做求余運(yùn)算。 ?給定一個鏈表,旋轉(zhuǎn)鏈表,將鏈表每個節(jié)點(diǎn)向右移動 k 個位置,其中 k 是非負(fù)數(shù)。 Given a linked list, rotate the list to the ...

    Hwg 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<