Java?詳解如何從尾到頭打印鏈表
1.題目
輸入一個鏈表的頭節(jié)點(diǎn),從尾到頭反過來返回每個節(jié)點(diǎn)的值(用數(shù)組返回)。
題目來源:力扣(LeetCode)
2.解法
2.1棧
棧的特點(diǎn)是先進(jìn)后出,所以我們創(chuàng)建一個棧,逐個將節(jié)點(diǎn)壓入棧內(nèi),然后建立一個數(shù)組,將棧內(nèi)的節(jié)點(diǎn)數(shù)值逐個彈出
class Solution { public int[] reversePrint(ListNode head) { Stack<ListNode> stack = new Stack<ListNode>();//創(chuàng)建一個棧 ListNode cur = head; //將節(jié)點(diǎn)壓棧 while (cur != null) { stack.push(cur); cur = cur.next; } int size = stack.size();//棧的長度 int[] array = new int[size];//創(chuàng)建一個和棧一樣長的數(shù)組 //出棧入數(shù)組 for (int i = 0; i < size; i++) { array[i] = stack.pop().val; } return array; } }
2.2遞歸
public class PrintList { ArrayList<Integer> cur = new ArrayList<Integer>(); public int[] reversePrint(ListNode head) { recur(head); int[] array = new int[cur.size()]; for (int i = 0; i <array.length; i++) { array[i] = cur.get(i); } return array; } public void recur(ListNode head) { if(head == null) { return ; } recur(head.next); cur.add(head.val); } }
3.復(fù)雜度
3.1棧
時間復(fù)雜度:O(n)。正向遍歷一遍鏈表,然后從棧彈出全部節(jié)點(diǎn),等于又反向遍歷一遍鏈表。 空間復(fù)雜度:O(n)。額外使用一個棧存儲鏈表中的每個節(jié)點(diǎn)。
3.2遞歸
時間復(fù)雜度:O(n) 遍歷鏈表,遞歸 NN次。
空間復(fù)雜度:O(n) 系統(tǒng)遞歸需要使用 O(N)的棧空間
到此這篇關(guān)于Java 詳解如何從尾到頭打印鏈表的文章就介紹到這了,更多相關(guān)Java 從尾到頭打印鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實(shí)現(xiàn)
- Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之單向鏈表
- Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之環(huán)形鏈表
- Java實(shí)現(xiàn)順序表和鏈表結(jié)構(gòu)
- Java實(shí)現(xiàn)單鏈表基礎(chǔ)操作
- Java關(guān)于重排鏈表詳細(xì)解析
- Java?詳解分析鏈表的中間節(jié)點(diǎn)
- Java復(fù)雜鏈表的復(fù)制詳解
- 劍指Offer之Java算法習(xí)題精講鏈表專題篇
相關(guān)文章
Java的wait(), notify()和notifyAll()使用心得
本篇文章是對java的 wait(),notify(),notifyAll()進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-08-08Spring?WebFlux怎么進(jìn)行異常處理源碼解析
這篇文章主要為大家介紹了Spring?WebFlux怎么進(jìn)行異常處理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08java poi導(dǎo)出excel時如何設(shè)置手動換行
這篇文章主要介紹了java poi導(dǎo)出excel時如何設(shè)置手動換行,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06MyBatis開發(fā)Dao層的兩種方式實(shí)現(xiàn)(原始Dao層開發(fā))
這篇文章主要介紹了MyBatis開發(fā)Dao層的兩種方式實(shí)現(xiàn)(原始Dao層開發(fā)),并對數(shù)據(jù)庫進(jìn)行增刪查改,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12mybatis-plus saveOrUpdateBatch踩坑記錄
這篇文章主要介紹了mybatis-plus saveOrUpdateBatch踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12java中的Io(input與output)操作總結(jié)(三)
這一節(jié)我們來講Scanner類和PrintWriter類的用法,感興趣的朋友可以了解下2013-01-01