剑指–从尾到头打印链表
1,题目:

2,思路:
方法一:普通方法(自己写的):
- 先计算出链表的长度
- tmp重新指向开头节点
- 从头到尾的链表的节点值从数组的最后开始往前放置
方法二:栈:
- 1.创建一个栈,用于存储链表的节点
- 2.创建一个指针,初始时指向链表的头节点
- 3.当指针指向的元素非空时,重复下列操作:
- 4.将指针指向的节点压入栈内
- 5.将指针移到当前节点的下一个节点
- 6.获得栈的大小 size,创建一个数组 print,其大小为 size
- 7.创建下标并初始化 index = 0
- 8.重复 size 次下列操作:
- 9.从栈内弹出一个节点,将该节点的值存到 print[index]
- 10.将 index 的值加 1
- 11.返回 print
3,代码:
方法一:普通方法(自己写的):
class Solution {
public int[] reversePrint(ListNode head) {
int length = 0;//用于计算链表的长度
ListNode tmp = head;
while(tmp != null){
length ++;//先找出链表的长度
tmp = tmp.next;
}
int[] res = new int[length];
tmp = head;//tem重新指向开头节点
while(tmp != null){
res[length-1] = tmp.val;//从头到尾的链表的节点值从数组的最后开始往前放置
length--;
tmp = tmp.next;
}
return res;
}
}
方法二:栈:
class Solution {
public int[] reversePrint(ListNode head) {
/*
1.创建一个栈,用于存储链表的节点
2.创建一个指针,初始时指向链表的头节点
3.当指针指向的元素非空时,重复下列操作:
4.将指针指向的节点压入栈内
5.将指针移到当前节点的下一个节点
6.获得栈的大小 size,创建一个数组 print,其大小为 size
7.创建下标并初始化 index = 0
8.重复 size 次下列操作:
9.从栈内弹出一个节点,将该节点的值存到 print[index]
10.将 index 的值加 1
11.返回 print
*/
Stack<ListNode> stack = new Stack<ListNode>();
ListNode temp = head;
while (temp != null) {//将指针指向的节点压入栈内,将指针移到当前节点的下一个节点
stack.push(temp);
temp = temp.next;
}
int size = stack.size();//获得栈的大小 size
int[] print = new int[size];
for (int i = 0; i < size; i++) {
print[i] = stack.pop().val;//从栈内弹出一个节点,将该节点的值存到 print[index]
}
return print;
}
}
803

被折叠的 条评论
为什么被折叠?



