【在线编程】从尾到头打印链表
【问题描述】
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
【解题思路 & Java实现】
方法一:递归。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> result = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode == null) {
return result;
}
printListFromTailToHead(listNode.next);
result.add(listNode.val);
return result;
}
}
方法二:借用栈
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> result = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
if (listNode == null) {
return result;
}
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
while (!stack.isEmpty()) {
result.add(stack.pop());
}
return result;
}
}
方法三:使用 ArrayList 的 add(index, element),从头部插入节点值。
/**
* 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> array = new ArrayList<>();
while(listNode != null) {
array.add(0, listNode.val);
listNode = listNode.next;
}
return array;
}
}