题解 | #从尾到头打印链表#
从尾到头打印链表
https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.LinkedList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//建立一个链表
LinkedList<Integer> stack = new LinkedList<Integer>();
//只要listNode链表存在数
//就将数一个个挤入stack链表
//不断递归
while (listNode != null) {
stack.addLast(listNode.val);
listNode = listNode.next;
}
//建立一个链表res进行存放
ArrayList<Integer> res = new ArrayList<Integer>();
/*因为stack.size()随着removeLast()操作会越来越小,所以需要
一个常数m进行记录最初值
*/
int m = stack.size();
for (int i = 0; i < m; i++) {
//removeLast() 删除并返回最后一个元素
res.add(stack.removeLast()) ;
//pop() 是栈中删除并返回顶部元素
//类似于removeFirst
}
return res;//返回链表
}
}
与LC不同,是返回一个链表res,需要将链表的值逆向输入至res
for循环中,要注意stack.size()的值是不断缩小的,因此需要m进行记录
查看1道真题和解析