题解 | #从尾到头打印链表#
从尾到头打印链表
https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035
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) {
//1.栈
//使用ArrayList中的add(index,value)方法,在index为0的位置持续插入value值就可以得到逆序的链表
// ArrayList<Integer> list=new ArrayList<>();
// ListNode temp = listNode;
// while(temp!=null){
// list.add(0,temp.val);
// temp=temp.next;
// }
// return list;
// }
//2.递归
//step 1:从表头开始往后递归进入每一个节点。
//step 2:遇到尾节点后开始返回,每次返回依次添加一个值进入输出数组。
//step 3:直到递归返回表头。
// ArrayList<Integer> list = new ArrayList<>();
// public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
// if (listNode != null) {
// printListFromTailToHead(listNode.next);
// list.add(listNode.val);
// }
// return list;
// }
//反转链表
//直接反转链表
// public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
// ArrayList<Integer> list=new ArrayList<>();
// while(listNode != null){
// list.add(listNode.val);
// listNode=listNode.next;
// }
// Collections.reverse(list);//直接反转链表
// return list;
// }
//利用栈遍历,最后再把栈弹出到列表
public ArrayList<Integer> printListFromTailToHead(ListNode
listNode) {
ArrayList<Integer> list = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
while (!stack.empty()) {
list.add(stack.pop());
}
return list;
}
}
本题累计提交 6 次
2分钟前 | 答案正确 | 228ms | 18468KB | Java | 查看详情 |
2分钟前 | 编译错误 | 0ms | 0KB | Java | 查看详情 |
4分钟前 | 答案正确 | 207ms | 17040KB | Java | 查看详情 |
5分钟前 | 编译错误 | 0ms | 0KB | Java | 查看详情 |
13分钟前 | 答案正确 | 199ms | 18840KB | Java | 查看详情 |
25分钟前 | 答案正确 | 209ms | 18532KB | Java | 查看详情 |
查看2道真题和解析