輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。
鏈表節點定義:
/**
* public class ListNode {
* int val;
* ListNode next = null;
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
鏈表訪問是從頭到尾訪問的,而要從尾到頭的訪問鏈表,明顯是一個后進先出的數據結構,也就是“棧”,因此我們可以使用一個棧,對鏈表從頭到尾訪問,進棧,在出棧。考慮到棧和遞歸的緊密關系,我們可以使用遞歸來實現程序,注意在鏈表過長時可能會棧溢出。
代碼僅供參考
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
if(listNode == null){
return list;
}
recurVisitList(listNode,list);
return list;
}
private void recurVisitList(ListNode node,ArrayList<Integer> list){
if(node == null){
return;
}
recurVisitList(node.next,list);
list.add(node.val);
}