国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

反轉鏈表 Java版 圖文并茂思路分析帶答案(力扣第206題)

這篇具有很好參考價值的文章主要介紹了反轉鏈表 Java版 圖文并茂思路分析帶答案(力扣第206題)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

反轉鏈表

力扣第206題

我們不只是簡單的學習(背誦)一個數(shù)據(jù)結構,而是要分析他的思路,以及為什么要有不同的指針等等

非遞歸方式:

思路分析:首先要鏈表有個頭指針沒有任何問題

然后,我們要將1的下一個節(jié)點指向空,這樣才能將其反轉過來,但是這個時候我們發(fā)現(xiàn)和下一個節(jié)點2失去了聯(lián)系

所以我們要有一個指針,在1還沒有將next指向空前,記錄下2的位置。所以我們用一個next指針記錄2。并為了好理解,將head改名為cur代表當前節(jié)點。

因此,我們只要將cur的指向下一個節(jié)點的指針指向空之后,便將cur和next指針同時向后移動。

不過這樣我們發(fā)現(xiàn),我們cur和前面的節(jié)點失去了聯(lián)系,就不能將節(jié)點2指向1了,所以我們還要有一個指針負責記錄前一個節(jié)點,我們就叫它pre吧,那么再來考慮pre指針最開始應該放在哪呢,其實只要指向最左邊的那個NULL就好了。

因此我們剛剛是將1指向NULL,現(xiàn)在改成將cur指向pre即可,就像這樣。

然后我們就可以將這三個指針都向后移動,重復上一步和本步操作,直到cur為null結束即可。

遞歸方式:

首先是寫出遞歸的最后答案,也就是所謂的遞歸出口,毫無疑問是返回第一個節(jié)點head

if (head == null || head.next==null)
 ? ? return head;

再調用一次遞歸函數(shù)

reverseListRecursive(head.next);

直接從宏觀的角度上看,肯定是將head.next之后的所有節(jié)點都反轉過來了,就像下圖所示,其中1被擋住了不要在意。

重點來了,如何將最后的節(jié)點2指向節(jié)點1,并將節(jié)點1指向空?

其實用兩行代碼實現(xiàn)即可,將head.next(節(jié)點2).next(NULL)指向節(jié)點1,也就是 = head即可

然后再將節(jié)點1指向空,也即head.next = null;

 head.next.next = head;
 head.next = null;

力扣答案總結:

我們來具體實現(xiàn)一下吧,其中的reverseList內的代碼即是力扣答案文章來源地址http://www.zghlxwxcb.cn/news/detail-449664.html

/**
 * @Author: 翰林猿
 * @Description: 反轉鏈表
 **/
public class ReverseListNode {
 ? ?//非遞歸方式
 ? ?public ListNode reverseList(ListNode head) {
 ? ? ? ?//初始化三個指針,其中l(wèi)atter要在過程中指定,因為有可能cur為空,導致latter為空
 ? ? ? ?ListNode pre = null;
 ? ? ? ?ListNode cur = head;
 ? ? ? ?while (cur != null) {
 ? ? ? ? ? ?ListNode latter = cur.next;
 ? ? ? ? ? ?//將cur指向pre
 ? ? ? ? ? ?cur.next = pre;
 ? ? ? ? ? ?//三個指針都向后移動,其中pre和cur在這里移動,latter在第一句會自行移動。
 ? ? ? ? ? ?pre = cur;
 ? ? ? ? ? ?cur = latter;
 ? ? ?  }
 ? ? ? ?return pre;
 ?  }
 ? ?//遞歸方式
 ? ?public ListNode reverseListRecursive(ListNode head) {
 ? ? ? ?if (head == null || head.next==null)
 ? ? ? ? ? ?return head;
 ? ? ? ?ListNode rev = reverseListRecursive(head.next); ? ? //最后會獲取到head
 ? ? ? ?head.next.next = head;
 ? ? ? ?head.next = null;
 ? ? ? ?return rev;
 ?  }
 ? ?public static void main(String[] args) {
 ? ? ? ?ListNode head = new ListNode(1);
 ? ? ? ?head.next = new ListNode(2);
 ? ? ? ?head.next.next = new ListNode(3);
 ? ? ? ?head.next.next.next = new ListNode(4);
 ? ? ? ?head.next.next.next.next = new ListNode(5);
?
 ? ? ? ?ListNode node = new ReverseListNode().reverseList(head);
 ? ? ? ?System.out.println("反轉后的第一個節(jié)點值應當為5 = "+node.val);
?
 ? ? ? ?ListNode node2 = new ReverseListNode().reverseListRecursive(head);
 ? ? ? ?System.out.println("遞歸反轉后的第一個節(jié)點值應當為5 = "+node.val);
 ?  }
}
?
?
class ListNode {
 ? ?int val;
 ? ?ListNode next;
 ? ?ListNode() {
 ?  }
 ? ?ListNode(int val) {
 ? ? ? ?this.val = val;
 ?  }
 ? ?ListNode(int val, ListNode next) {
 ? ? ? ?this.val = val;
 ? ? ? ?this.next = next;
 ?  }
}

到了這里,關于反轉鏈表 Java版 圖文并茂思路分析帶答案(力扣第206題)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java 線程池詳解,圖文并茂,還有誰不會?!

    Java 線程池詳解,圖文并茂,還有誰不會?!

    來源:blog.csdn.net/mu_wind/article/details/113806680 我們知道,線程的創(chuàng)建和銷毀都需要映射到操作系統(tǒng),因此其代價是比較高昂的。出于避免頻繁創(chuàng)建、銷毀線程以及方便線程管理的需要,線程池應運而生。 降低資源消耗 :線程池通常會維護一些線程(數(shù)量為 corePoolSize),這些線

    2024年02月06日
    瀏覽(94)
  • Java中抽象類和接口的區(qū)別,一文弄懂,圖文并茂

    Java中抽象類和接口的區(qū)別,一文弄懂,圖文并茂

    前言 1. 抽象類 1.1 定義 1.2 示例 1.3 使用 1.3.1代碼-抽象類 1.3.2代碼-抽象類繼承類使用 1.3.3輸出結果為: 1.4UML類圖展示類間的關系 2. 接口 2.1 定義 2.2 示例 2.2.1代碼-接口 2.3 使用 2.3.1代碼-接口實現(xiàn) 2.3.2代碼-接口實現(xiàn)類使用 2.3.3輸出結果為: 2.4UML類圖展示類間的關系 3. 抽象類和

    2024年02月04日
    瀏覽(23)
  • Activiti7(圖文并茂)

    Activiti7(圖文并茂)

    Activiti 是由 jBPM (BPM,Business Process Management 即業(yè)務流程管理) 的創(chuàng)建者 Tom Baeyens 離開 JBoss 之后建立的項目,構建在開發(fā) jBPM 版本 1 到 4 時積累的多年經(jīng)驗的基礎之上,旨在創(chuàng)建下一代的 BPM 解 決方案。 Activiti 作為一個開源的工作流引擎,它實現(xiàn)了BPMN 2.0規(guī)范,可以發(fā)布設計

    2024年02月06日
    瀏覽(90)
  • RabbitMQ入門篇【圖文并茂,超級詳細】

    RabbitMQ入門篇【圖文并茂,超級詳細】

    接下來看看由輝輝所寫的關于RabbitMQ的相關操作吧 目錄 ????Welcome 的Huihui\\\'s Code World ! !???? 前言 1.什么是MQ 2.理解MQ 3.生活案例分析與理解 4.MQ的使用場景 (1)解耦 傳統(tǒng)模式 中間件模式 (2)削峰 傳統(tǒng)模式 中間件模式 (3)異步 ?傳統(tǒng)模式 中間件模式 5.常見的MQ 一.?Rab

    2024年01月20日
    瀏覽(95)
  • secureCRT安裝和使用教程【圖文并茂】

    secureCRT安裝和使用教程【圖文并茂】

    簡介 一般而言,嵌入式開發(fā)板使用串口來監(jiān)控后臺。可以使用串口線連接開發(fā)板和電腦,對于沒有串口的筆記本電腦來說,一般還需要一根USB轉串口線。 串口線 串口軟件多種多樣,比如secureCRT、Xshell、超級終端、miniCom、putty等,它們的功能大同小異,因此只需安裝用的順手

    2024年02月03日
    瀏覽(91)
  • 發(fā)送圖文并茂的html格式的郵件

    發(fā)送圖文并茂的html格式的郵件

    本文介紹如何生成和發(fā)送包含圖表和表格的郵件,涉及echarts圖表轉換為圖片、圖片內嵌到html郵件內容中、html郵件內容生成、郵件發(fā)送方法等 因為html格式的郵件不支持echarts,也不支持js執(zhí)行,所以圖表需要轉換為圖片內嵌在郵件內容中 因為平臺首頁相關統(tǒng)計都是使用echarts渲

    2024年02月11日
    瀏覽(22)
  • 什么是感知機——圖文并茂,由淺入深

    什么是感知機——圖文并茂,由淺入深

    生活中常常伴隨著各種各樣的邏輯判斷,比如看到遠方天空中飄來烏云,打開手機看到天氣預報說1小時后40%的概率下雨,此時時候我們常常會做出等會下雨,出門帶傘的判斷。 上述思考過程可以抽象為一個”與“的”神經(jīng)邏輯“。當”看到烏云“和”天氣預報40%下雨“同時

    2023年04月20日
    瀏覽(24)
  • Flutter 圖文并茂:打造交互豐富的應用界面

    Flutter作為一種現(xiàn)代的UI工具包,為開發(fā)者提供了豐富的工具和小部件,輕松構建漂亮、響應迅速的應用界面。本篇博客將帶你踏入Flutter的世界,學習如何巧妙運用圖片、按鈕、圖標,以及行與列進行布局,打造令人驚艷的用戶交互體驗。 無論你是Flutter初學者還是有一定經(jīng)驗

    2024年02月03日
    瀏覽(16)
  • NodeMCU ESP8266開發(fā)流程詳解(圖文并茂)

    NodeMCU ESP8266開發(fā)流程詳解(圖文并茂)

    NodeMCU ESP8266基于Arduino IDE的開發(fā)相對來說還是比較容易上手的,我們基本需要以下幾個東西; 一臺安裝好Arduino IDE的PC,并且已經(jīng)部署環(huán)境(安裝好開發(fā)板的串口驅動); NodeMCU ESP8266 開發(fā)板; USB線(根據(jù)實際開發(fā)板的情況,本文需要Micro-USB的線); 具體如下圖所示; 本文默

    2024年02月06日
    瀏覽(92)
  • NodeMCU ESP8266 GPIO使用詳解(圖文并茂)

    NodeMCU ESP8266 GPIO使用詳解(圖文并茂)

    前面的文章中我們已經(jīng)學習了如何點亮一個LED燈,在嵌入式的世界里,這個相當于我們初學一門編程語言,寫下的Hello World程序。 為了讓LED閃爍,我們需要操作芯片的GPIO,這是硬件最底層的概念,只不過 Arduino 的編程中,底層的庫函數(shù)已經(jīng)為我們做好了硬件的封裝,只要調用

    2024年02月03日
    瀏覽(625)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包