问题:
输入一个链表,从尾到头打印链表每个节点的值。
分析:
链表只能从头结点往后依次访问,需要从尾向头打印,可想到用另外的结构将所有链表数据存储,之后再从尾向头打印,后进先出为栈。
因此可以选用栈或递归来解决。
java实现栈可选用Stack类或者ArrayList类。
实现:
(1)ArrayList实现:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
ListNode l = listNode;
while(l!=null){
list1.add(l.val);
l = l.next;
}
for(int i=list1.size()-1;i>=0;i--){
list2.add(list1.get(i));
}
return list2;
}
}
(2)Stack实现:
import java.util.*;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> st = new Stack<Integer>();
while(listNode!=null){
st.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> list = new ArrayList<Integer>();
while(!st.isEmpty()){
list.add(st.pop());
}
return list;
}
}
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}