1.题目
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
2.解法1
使用头插法。但由于ArrayList使用头插法会效率低下,所以这个方法不太高明。
public class Solution {
static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> ret = new ArrayList<>();
while (listNode!=null) {
ret.add(0,listNode.val);
listNode=listNode.next;
}
return ret;
}
}
3.解法2
使用栈。
public class Solution {
static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Deque<Integer> stack = new ArrayDeque<>();
while (listNode!=null) {
stack.push(listNode.val);
listNode=listNode.next;
}
return new ArrayList<>(stack);
}
}
总结
使用头插法或者栈。
算法系列在github上有一个开源项目,主要是本系列博客的demo代码。https://github.com/forestnlp/alg
如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。
您的支持是对我最大的鼓励。