題目:輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。
這是這道題目的第二種方法,第一種方法參見:劍指offer-面試題5-1 從尾到頭列印鍊錶。
第一種方法中的鍊錶由於其結點是內部類,無法直接傳遞進入reverse()方法,我選擇了直接傳入整個鍊錶,雖然也實現了題目效果,但仍不夠嚴謹。
所以在第二種方法中用了乙個簡單的內部類node,這樣就可以滿足題目要求。
第二種方法中還用到了遞迴,這個方法簡單而且明了,是個不錯的方法。
package swordoffer;
/** * 這是劍指offer的第5題:
* 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。
*@author stephen huge
*/public
class
ex05reverselinklist2
public
static
void
reverselinklist2(node header)
system.out.println(header.data.tostring());
}public
class
node
node(object data)
}}
執行結果:
ccc
bbbaaa
遞迴的核心就是兩個,判斷和重複呼叫。如果判斷滿足條件,就停止呼叫,這是遞迴方法的「剎車」,判斷不滿足條件就一直呼叫,直到滿足條件為止。
這段**的邏輯就是當鍊表結點的後繼結點next !=null時遞迴呼叫原方法,直到next == null。其實這就是到達單鏈表尾結點的情況,之後列印尾結點的data值,然後方法執行完畢,返回上一層,列印尾結點的前驅結點,再返回上一層…最終列印所有結點的data值。我們成功的實現了鍊錶的反轉。
從尾到頭列印單鏈表(劍指offer面試題5)
題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。分析 此題考察單鏈表的理解和應用,為了實現列印,必須先建立乙個單鏈表,頭結點可有可無,但有頭結點和無頭結點在程式設計上是應該注意的,反向列印思路不一樣,這裡以包含頭結點舉例分析,單鏈表以尾部插入方式建立,頭結點資料域為空,頭結點指標指向下...
劍指Offer 面試題五 從尾到頭列印鍊錶
鍊錶的建立 結點的插入 結點的刪除等操作都只需要20行左右的 就能實現,其 量比較適合面試。鍊錶問題 面試題5 從尾到頭輸出鍊錶 面試題13 在o 1 時間刪除鍊錶結點 面試題15 鍊錶中的倒數第k個結點 面試題16 反轉鍊錶 面試題17 合併兩個排序的鍊錶 面試題37 兩個鍊錶的第乙個公共結點 面...
劍指Offer 面試題5 從尾到頭列印鍊錶
題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印每個節點的值.分析1 通常,列印是乙個唯讀操作,我們不希望列印的同時去修改原資料的內容.故我們不能改變鍊錶的結構.解決這個問題肯定是需要遍歷鍊錶的,但是遍歷的順序是從頭到尾的,可輸出的順序確實從尾到頭,也就是說第乙個遍歷到的節點最後乙個輸出,最後乙個遍歷...