难度等级:简单
上一篇算法:
力扣此题地址:
1.题目:从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
2.解题思路:
由题意知,第一个遍历到的结点最后一个输出,最后一个遍历到的结点第一个输出,则想到栈“后进先出”的思想,这里可以用栈来实现。
1.构建一个栈,构建一个指针“头结点”
2.循环遍历链表的每一个结点,把结点放入栈中
3.获取栈的长度,创建等长数组,最后把栈中数据循环遍历放入数组中,返回数组。
3.代码实现:
/**
* 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<Integer> stack = new Stack<>();
// 构建一个指针,指向链表的头结点位置,从它开始向后遍历
ListNode curNode = head;
// 不断的遍历原链表中的每个节点,直到为 null
while (curNode != null){
// 把每个节点的值加入到栈中
stack.push(curNode.val);
// curNode 向后移动
curNode = curNode.next;
}
// 获取栈的长度
int size = stack.size();
// 通过栈的长度,定义一个同样长度的数组 res
int[] res = new int[size];
// 遍历栈,从栈顶挨个弹出每个值,把这些值依次加入到数组 res 中
for(int i = 0 ; i < size; i++){
// 数组接收栈顶元素值
res[i] = stack.pop();
}
// 最后返回结果数组就行
return res;
}
}