輸入一個鏈表,按鏈表從尾到頭的順序返回一個 ArrayList。javascript
題目要求的是從尾到頭。這種「後進先出」的訪問順序,天然想到了用棧。前端
時間複雜度 O(N),空間複雜度 O(N)。java
// ac地址:https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035 // 原文地址:https://xxoo521.com/2019-12-21-da-yin-lian-biao/ /*function ListNode(x){ this.val = x; this.next = null; }*/ /** * @param {ListNode} head * @return {any[]} */ function printListFromTailToHead(head) { const stack = []; let node = head; while (node) { stack.push(node.val); node = node.next; } const reverse = []; while (stack.length) { reverse.push(stack.pop()); } return reverse; }
專一前端與算法的系列乾貨分享,歡迎關注(¬‿¬):
「微信公衆號: 心譚博客」| xxoo521.com | GitHub
發現後半段出棧的邏輯,其實就是將數組reverse
反轉。所以,藉助 javascript 的 api,更優雅的寫法以下:node
// ac地址:https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035 // 原文地址:https://xxoo521.com/2019-12-21-da-yin-lian-biao/ /** * @param {ListNode} head * @return {any[]} */ function printListFromTailToHead(head) { const stack = []; let node = head; while (node) { stack.push(node.val); node = node.next; } return stack.reverse(); }
專一前端與算法的系列乾貨分享,歡迎關注(¬‿¬)git