1. 程式人生 > >前端常見演算法面試題之 - 從尾到頭列印連結串列[JavaScript解法]

前端常見演算法面試題之 - 從尾到頭列印連結串列[JavaScript解法]

前端常見演算法面試題之 - 從尾到頭列印連結串列[JavaScript解法]

題目描述

輸入一個連結串列的頭結點,從尾到頭反過來打印出每個結點的值

實現思路

前端工程師看到這個題目,直接想到的就是,寫個while迴圈來遍歷連結串列,在迴圈中把節點的值儲存在陣列中,最後在把陣列倒序後,遍歷陣列列印每個值

如果這個題目這麼簡單,面試官也就不考了

如果面試官提要求說,不許使用陣列的任何方法,你會怎麼解決?

由於是連結串列,肯定要遍歷。遍歷的順序是從頭到尾,可輸出的順序卻是從尾到頭。

也就是先拿到的資料,最後一個輸出。最後拿到的資料,第一個輸出。有沒有感覺跟棧的定義很像?棧就是“後進先出”,題目的要求也是。

而遞迴本質就是一個棧結構,所以我們用遞迴來實現:每次遍歷時,先輸出後面的節點,在輸出當前節點

程式碼實現

function printListFromTailToHead(head) {
  if (head.next) {
    printListFromTailToHead(head.next);
  }

  console.log(head.val);
}

程式碼看起來很清爽,但是遞迴有個問題,當引數很大時,會導致迴圈呼叫層級很深,有可能導致呼叫棧溢位。後續再討論如何優化。