网站链接:牛客网-题库-在线编程-剑指offer
import java.util.*;
/**
* 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,数字的顺序和顺序遍历链表的结果相反
解题思路一
顺序遍历链表,将链表中的值依次存入栈中。当链表遍历完成以后,再将栈中的数值取出,存入ArrayList中。当栈空的时候返回即可
代码 - Java
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> list = new ArrayList<>();
while (!stack.empty()) {
list.add(stack.pop());
}
return list;
}
}
解题思路二
第二种思路就需要很熟悉Java集合的一些方法!在这一题中,需要用到的是:菜鸟教程 - Java ArrayList add() 方法
arraylist.add(int index,E element)
add() 方法将元素插入到指定位置的动态数组中。
先创建好一个arraylist,在顺序遍历链表的时候,每遍历一个节点,就把该节点的数值使用add(0,节点数值)的方法将该节点数值添加到arraylist中,由于每一次都是在索引为0的位置添加数据(相当于“前插”),也可以实现题目的需求。
代码 - Java
import java.util.*;
/**
* 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<Integer> list = new ArrayList<>();
while (listNode != null) {
list.add(0, listNode.val);
listNode = listNode.next;
}
return list;
}
}