剑指 Offer 06. 从尾到头打印链表
程序员文章站
2022-06-17 18:14:02
...
链表定义:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
1.递归:
如果题做的多了,一下就能想出用递归的方式去做,递归还是自己多做题多领会吧,实在想不过来去算一遍数学中的均差。
代码如下:
class Solution {
public int[] reversePrint(ListNode head) {
List<Integer> list = new ArrayList<>();
getAns(list, head);
int[] ans = new int[list.size()];
int index = 0;
for (Integer num : list) {
ans[index] = num;
index++;
}
return ans;
}
private void getAns(List<Integer> list, ListNode node) {
if (node == null) return;
getAns(list, node.next);
list.add(node.val);
}
}
2.采用辅助数据结构(栈):
结合本题的要点,先进后出,可以联想到用栈来辅助实现。
代码如下:
class Solution {
public int[] reversePrint(ListNode head) {
//用辅助栈
Stack<Integer> stack = new Stack<>();
while (head != null) {
stack.push(head.val);
head = head.next;
}
int[] ans = new int[stack.size()];
int index = 0;
while (!stack.empty()) {
ans[index] = stack.pop();
index++;
}
return ans;
}
}
下一篇: phpmyadmin问题请教