剑指 Offer 06. 从尾到头打印链表
题目描述: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1: 输入:head = [1,3,2] 输出:[2,3,1]
限制: 0 <= 链表长度 <= 10000
方法一:栈
注意点: 1.栈的特点是先进后出,根据题意,应条件反射想到栈,我就没反应过来,想到的是递归,说明还不熟练,还需多加练习; 2.主要思路:新建一个用于反转存储结点的链栈和一个临时结点指向链表头部,接下来进行循环判断:只要链表非空,就将节点压入栈,并且将临时结点后移一位;跳出循环后,获得栈的长度,新建一个整型数组用于循环获取链栈中保存的值,并最终返回; 3.注意栈的用法:定义栈时无需像定义数组时直接给出长度,可在创建后再用size()取得长度,此题用泛型是<ListNode>,为链栈; 4.注意栈的入栈方法push(),和出栈方法pop()。
执行结果:通过 执行用时:1 ms, 在所有?Java?提交中击败了70.92%的用户 内存消耗:38.9 MB, 在所有?Java?提交中击败了72.13%的用户 通过测试用例:24?/?24
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) { //由题目的反转输出应该联系到栈
Stack<ListNode> stack=new Stack<ListNode>();
ListNode temp=head;
while(temp!=null){
stack.push(temp); //此处仅需保存结点即可
temp=temp.next;
}
int size=stack.size();
int[] print=new int[size];
for(int i=0;i<size;i++){
print[i]=stack.pop().val;
}
return print;
}
}
平平无奇小白程序媛一枚,欢迎各位大佬交流指教,如有不正确的地方,欢迎留言改正,谢谢!!!
|