題解 | #從尾到頭打印鏈表#
從尾到頭打印鏈表
http://www.fangfengwang8.cn/practice/d0267f7f55b3412ba93bd35cfa8e8035
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ import java.util.ArrayList; import java.util.LinkedList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { //建立一個鏈表 LinkedList<Integer> stack = new LinkedList<Integer>(); //只要listNode鏈表存在數(shù) //就將數(shù)一個個擠入stack鏈表 //不斷遞歸 while (listNode != null) { stack.addLast(listNode.val); listNode = listNode.next; } //建立一個鏈表res進(jìn)行存放 ArrayList<Integer> res = new ArrayList<Integer>(); /*因為stack.size()隨著removeLast()操作會越來越小,所以需要 一個常數(shù)m進(jìn)行記錄最初值 */ int m = stack.size(); for (int i = 0; i < m; i++) { //removeLast() 刪除并返回最后一個元素 res.add(stack.removeLast()) ; //pop() 是棧中刪除并返回頂部元素 //類似于removeFirst } return res;//返回鏈表 } }
與LC不同,是返回一個鏈表res,需要將鏈表的值逆向輸入至res
for循環(huán)中,要注意stack.size()的值是不斷縮小的,因此需要m進(jìn)行記錄