输入一个链表,从尾到头打印链表每个节点的值。
//思路:遍历节点,将其存在栈中,按照栈先进后出的原则,就行反向输出
import java.util.*; import java.util.ArrayList; class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class aaa { Stack<Integer> s=new Stack<Integer>(); ArrayList<Integer> a=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { s.push(listNode.val); while(listNode.next!=null){ listNode=listNode.next; s.push(listNode.val); } while(!s.empty()){ a.add(s.pop()); } return a; } public static void main(String[] args){ ListNode l=new ListNode(5); l.next=new ListNode(6); aaa a=new aaa(); ArrayList<Integer> b=a.printListFromTailToHead(l); for (Integer integer : b) { System.out.println(integer); } } }
//思路二,考虑这个问题是一个有终止的重复过程,可以利用递归实现 import java.util.*; import java.util.ArrayList; class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class aaa { ArrayList<Integer> a=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if(listNode!=null){ printListFromTailToHead(listNode.next); a.add(listNode.val); } return a; } public static void main(String[] args){ ListNode l=new ListNode(5); l.next=new ListNode(6); aaa a=new aaa(); ArrayList<Integer> b=a.printListFromTailToHead(l); for (Integer integer : b) { System.out.println(integer); } } }