Java版本:
本人写的:思路:由于单链表,只能顺序从头到尾查找,为了得到从尾部到头的结果,所以可以先将结果存到List里在倒着输出。
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ import java.util.ArrayList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> arr=new ArrayList<Integer>(); ArrayList<Integer> arr2=new ArrayList<Integer>(); while(listNode!=null){ arr.add(listNode.val); listNode=listNode.next; } int len=arr.size(); for(int i=len-1;i>=0;i--){ arr2.add(arr.get(i)); } return arr2; } }
别人的思路:1.使用递归,每查找当前点,就递归查找后面的节点。
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ import java.util.ArrayList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> arr=new ArrayList<Integer>(); if(listNode==null)return arr; arr=printListFromTailToHead(listNode.next); arr.add(listNode.val); return arr; } }
2.使用栈结构,也是递归的思想
/** * 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) { Stack<Integer> stack=new Stack<Integer>(); while(listNode!=null){ stack.push(listNode.val); listNode=listNode.next; } ArrayList<Integer> arr=new ArrayList<Integer>(); while(!stack.empty()){ arr.add(stack.peek()); stack.pop(); } return arr; } }