剑指offer 6 从尾到头打印链表
1: 新建stack,将链表元素逐一push进栈,再将栈内元素pop到新建的Arraylist,即可得到反序链表
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Stack;//Attention!!!
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> temp=new Stack<Integer>();
//ListNode p=new ListNode();
//p=listNode;
while(listNode!=null){
temp.push(listNode.val);
listNode=listNode.next;
}
ArrayList<Integer> ans=new ArrayList<Integer>();
while(!temp.isEmpty()){
ans.add(temp.pop());
}
return ans;
}
} 2:递归法
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> newArrayList=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
printListFromTailToHead(listNode.next);
newArrayList.add(listNode.val);
}
return newArrayList;
}
} 3:向头插元素 import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode temp=listNode;
ArrayList<Integer> ans=new ArrayList<>();
while(temp!=null){
ans.add(0,temp.val);//每次向新建的ArrayList头部插入一个元素
temp=temp.next;//指针后移
}
return ans;
} 