剑指 Offer 06. 从尾到头打印链表
题意:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
解题思路
解法1:用Stack或者LinkedList数据结构,分别利用Stack(先入后出)、LinkedList(addFirst加入list头)的特性,然后遍历Stack或者LinkedList,构建结果数组
解法2:如果题目要求过程中不可以使用其他数据结构,只可以在原链表上操作,得到结果数组。可以通过两次遍历法,第一次遍历得到链表的大小,然后就可以声明固定大小的数组,第二次遍历,将遍历到的数据,倒序插入数组即可
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
import java.util.LinkedList;
class Solution {
public int[] reversePrint(ListNode head) {
LinkedList<Integer> linkedList = new LinkedList<Integer>();
while (head != null) {
linkedList.addFirst(head.val);
head = head.next;
}
int[] ans = new int[linkedList.size()];
for (int i = 0; i < linkedList.size(); i++) {
ans[i] = linkedList.get(i);
}
return ans;
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
}
##解法2
class Solution {
public int[] reversePrint(ListNode head) {
int len = 0;
ListNode tempListNode = head;
while (tempListNode != null) {
len++;
tempListNode = tempListNode.next;
}
int[] ans = new int[len];
for (int i = len - 1; i >= 0; i--) {
ans[i] = head.val;
head = head.next;
}
return ans;
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
}