package cn.dzp.flyroc.offer; import java.util.ArrayList; import java.util.Stack; public class PrintListFromTailToHeadDemo { /*题目描述:输入一个链表,从尾到头打印链表每一个节点的值*/ /*思路:借助栈实现,或用递归的方法 * 栈思想:咱们先遍历链表,遍历到一个节点就将其压入栈,直到全部节点都入栈, * 利用栈“先进后出的特色”,进行栈元素出站操做(首先是弹出栈顶节点 即,最后一个被压入栈的节点)并打印节点的值,直到栈为空*/ //代码实现 //定义一个List节点的实现类 public static class ListNode{ int val; ListNode next = null; //定义构造方法 ListNode(int val){ this.val = val; } } public static ArrayList<Integer> printListFromTailTOHead(ListNode listNode){ Stack<ListNode> stack = new Stack<>(); //建立栈对象,用来存放节点的值 ArrayList<Integer> list = new ArrayList<>(); //建立动态list,用来存放从栈中弹出的元素 if(listNode == null){ //判断节点是否为空 return list; } while (listNode != null){ //节点不为空 stack.push(listNode); //节点压如栈中 listNode = listNode.next; //下一个节点 } while (!stack.isEmpty()){ //栈不为空 list.add(stack.pop().val); //栈中元素出栈,存到list中 } System.out.println("list中元素:"+list.toString()); return list; } public static void main(String[] args){ //定义List节点 ListNode l1 = new ListNode(1); ListNode l2 = new ListNode(2); ListNode l3 = new ListNode(3); ListNode l4 = new ListNode(4); ListNode l5 = new ListNode(5); //将节点关联 l1.next = l2; l2.next = l3; l3.next = l4; l4.next = l5; l5.next = null; printListFromTailTOHead(l1); } }