从尾到头输出链表
「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
**输入:**head = [1,3,2] 输出: [2,3,1]
限制:
0 <= 链表长度 <= 10000
题目分析
这道题同样考察对栈的理解,栈是先进后出的,而链表是一个一个元素排队指向的,我们可以把链表中从头到尾入栈,这样尾部的元素就在栈顶了,也可以采用递归的方法,从头到尾遍历链表,遍历的节点值放入列表中,然后倒序输出。
代码实现
递归实现:
//30
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
ArrayList<Integer> tmp = new ArrayList<Integer>();
public int[] reversePrint(ListNode head) {
reversecur(head);
int[] result = new int[tmp.size()];
for (int i = 0; i < result.length; i++) {
result[i] = tmp.get(i);
}
return result;
}
public void reversecur(ListNode head) {
if (head == null) {
return;
}
reversecur(head.next);
tmp.add(head.val);
}
}
这是我用java实现的功能,每个题都用不同的解法和写法,我大体整理了一下自己的思路然后就写了,也没有再想其他的方法,如果你有更好的解法,欢迎和我留言,我们一起进步,一起学习数据结构,共同进步,通过这道题能更熟悉栈和递归的功能和特点。
从这道题中我们可以看到看到递归和栈有密不可分的关联,递归就是在方法运行的时候又出现调用自己的情况,递归不能无限制的调用下去,而是需要有一条条件,当条件满足的时候,方法返回上层的方法,如果能够跳出循环。递归在我们真正项目中也应用广泛,我们一定要注意递归的条件,如果不限制的递归下去,就可能导致栈的溢出。
今天的题目就先到这里,希望这篇文章对你有帮助。