Java?詳解如何從尾到頭打印鏈表
1.題目
輸入一個鏈表的頭節(jié)點,從尾到頭反過來返回每個節(jié)點的值(用數(shù)組返回)。
題目來源:力扣(LeetCode)
2.解法
2.1棧
棧的特點是先進后出,所以我們創(chuàng)建一個棧,逐個將節(jié)點壓入棧內(nèi),然后建立一個數(shù)組,將棧內(nèi)的節(jié)點數(shù)值逐個彈出
class Solution { public int[] reversePrint(ListNode head) { Stack<ListNode> stack = new Stack<ListNode>();//創(chuàng)建一個棧 ListNode cur = head; //將節(jié)點壓棧 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.復雜度
3.1棧
時間復雜度:O(n)。正向遍歷一遍鏈表,然后從棧彈出全部節(jié)點,等于又反向遍歷一遍鏈表。 空間復雜度:O(n)。額外使用一個棧存儲鏈表中的每個節(jié)點。
3.2遞歸
時間復雜度:O(n) 遍歷鏈表,遞歸 NN次。
空間復雜度:O(n) 系統(tǒng)遞歸需要使用 O(N)的??臻g
到此這篇關(guān)于Java 詳解如何從尾到頭打印鏈表的文章就介紹到這了,更多相關(guān)Java 從尾到頭打印鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java的wait(), notify()和notifyAll()使用心得
本篇文章是對java的 wait(),notify(),notifyAll()進行了詳細的分析介紹,需要的朋友參考下2013-08-08MyBatis開發(fā)Dao層的兩種方式實現(xiàn)(原始Dao層開發(fā))
這篇文章主要介紹了MyBatis開發(fā)Dao層的兩種方式實現(xiàn)(原始Dao層開發(fā)),并對數(shù)據(jù)庫進行增刪查改,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12mybatis-plus saveOrUpdateBatch踩坑記錄
這篇文章主要介紹了mybatis-plus saveOrUpdateBatch踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12java中的Io(input與output)操作總結(jié)(三)
這一節(jié)我們來講Scanner類和PrintWriter類的用法,感興趣的朋友可以了解下2013-01-01