题目来源:https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&&tqId=11156&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
题解
解题思路:
思路1:将链表直接转换为ArrayList,然后将ArrayList逆转
思路2:用栈stack作为中间站,利用栈的特性,就可以将链表转换为ArrayList
代码实现
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
// 思路1
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
// 判空处理,如果链表头节点为空,就直接返回空列表
if (listNode == null) {
return list;
}
while (listNode != null) {
list.add(listNode.val);
listNode = listNode.next;
}
// 逆转
Collections.reverse(list);
return list;
}
}
// 思路2
import java.util.Stack;
import java.util.ArrayList;
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.isEmpty()) {
list.add(stack.pop());
}
return list;
}
}