面試題5:從尾到頭打印鏈表

題目描述

輸入一個鏈表,從尾到頭打印鏈表每個節(jié)點的值。 輸入為鏈表的表頭,輸出為需要打印的“新鏈表”的表頭。

代碼實現(xiàn)

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.*;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
/*      //根據(jù)方法返回值類型,首先可以想到頭插ArrayList的方法
        ArrayList<Integer> list = new ArrayList<Integer>();
        while(listNode != null){
            list.add(0,listNode.val);
            listNode = listNode.next;
        }
        return list;
*/
/*      //根據(jù)棧后進(jìn)先出的特點實現(xiàn)
        ArrayList<Integer> list = new ArrayList<Integer>();
        Stack<Integer> stack = new Stack<Integer>();
        while(listNode != null){
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while(!stack.isEmpty()){
            list.add(stack.pop());
        }
        return list;
*/
        //遞歸,每訪問一個結(jié)點的時候,先遞歸輸出它后面的結(jié)點
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(listNode != null){
            list = printListFromTailToHead(listNode.next);
            list.add(listNode.val);
        }
        return list;     
    }
}

主要思路

1、記住一個可以和棧一樣實現(xiàn)后進(jìn)先出的api:list.add(0,listNode.val);
2、因遞歸思想可以巧妙解決很多看似復(fù)雜的問題,最好熟練掌握

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容