【题目描述】输入一个链表,从尾到头打印链表每个节点的值。
【解题思路1】
//1. 遍历链表,使用一个ArrayList存储各个链表结点。
//2. 将ArrayList关于对称中心,进行翻转。得到的ArrayList即为从尾到头打印的顺序。
//实现一
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> arr = new ArrayList<Integer>();
if(listNode == null){
return arr;
}
while(listNode.next != null){
arr.add(listNode.val);
listNode = listNode.next;
}
arr.add(listNode.val);
int temp = 0;
for(int inx=0, end=arr.size()-1; inx<end; inx++, end--){
temp = arr.get(inx);
arr.set(inx, arr.get(end));
arr.set(end, temp);
}
return arr;
}
}
//实现二
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
while(listNode != null){
list.add(listNode.val);
listNode = listNode.next;
}
Collections.reverse(list);//使用Collections的reverse方法,直接将list反转
return list;
}
}
【解题思路2】
//1. 利用递归遍历链表
//2. 得到的即为所求,从尾到头的序列。
public class Solution {
ArrayList<Integer> arrayList=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
}
【解题思路3】
//1. 遍历链表,从头结点开始,依次入栈。
//2. 栈不空的情况下,依次弹出栈顶元素,存入ArrayList中,返回从尾到头的链表序列。
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> s = new Stack<Integer>();
ArrayList<Integer> arr = new ArrayList<Integer>();
if(listNode == null){
return arr;
}
while(listNode.next !=null){
s.push(listNode.val);
listNode = listNode.next;
}
s.push(listNode.val);
while(!s.empty()){
arr.add(s.pop());
}
return arr;
}
}