輸入一個(gè)鏈表,按鏈表值從尾到頭的順序返回一個(gè)ArrayList。
鏈表節(jié)點(diǎn)定義:
/**
* public class ListNode {
* int val;
* ListNode next = null;
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
鏈表訪問(wèn)是從頭到尾訪問(wèn)的,而要從尾到頭的訪問(wèn)鏈表,明顯是一個(gè)后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),也就是“?!?因此我們可以使用一個(gè)棧,對(duì)鏈表從頭到尾訪問(wèn),進(jìn)棧,在出棧??紤]到棧和遞歸的緊密關(guān)系,我們可以使用遞歸來(lái)實(shí)現(xiàn)程序,注意在鏈表過(guò)長(zhǎng)時(shí)可能會(huì)棧溢出。
代碼僅供參考
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);
}