一、题目:
输入一个链表,从尾到头打印链表每个节点的值。
二、提示代码:
/*
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
}
}
三、解题思路:
由于是将一个链表逆序输出,返回值是ArrayList,所以考虑用Stack来放每次遍历的链表节点值,在将stack中的元素出栈放到ArrayList中,最后返回出来。
四、可运行的java代码:
ListNode.java:
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
Solution_3.java:
import java.util.ArrayList;
import java.util.Stack;
public class Solution_3 {
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
Stack<Integer> stack = new Stack<Integer>();
ListNode flag = listNode;
int i;
while(flag!=null){
stack.add(flag.val);
flag = flag.next;
}
while(!stack.empty()){
System.out.println(stack.peek());
list.add(stack.pop());
}
return list;
}
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode head = new ListNode(0);
head.next = node1;
node1.next = node2;
node2.next = node3;
printListFromTailToHead(head);
}
}
五、总结:
平时要利用起来stack的先进后出原理,并且注意stack的peek()和pop()方法的区别(我写过一篇博客专门从JDK源码上介绍它俩的区别 链接为:https://blog.csdn.net/alan_gaohaodong/article/details/79278171)。