06. 从尾到头打印链表
题目:
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
实例:
输入:head = [1,3,2]
输出:[2,3,1]
思路一分析: 用两次循环遍历实现
返回是一个数组,则第一次循环遍历链表确定链表的元素个数,用来确定创建的数组的大小。
数组中的元素是链表中的元素反转的,所以第二次循环遍历将元素填充到数组时,数组时从后往前填值。
代码一:
class Solution {
public int[] reversePrint(ListNode head) {
ListNode node = head;
int count = 0;
while(node!=null){
count++;
node = node.next;
}
int[] array = new int[count];
for(int i = 0;i<count;i++){
array[count-i-1] = head.val;
head = head.next;
}
return array;
}
}
思路二: 用栈+数组实现,遍历两次
因为数组中的元素是反转的,所以想到栈这个数据结构。
第一次遍历时将链表中的元素依次压入栈中,通过stack.size()得到栈中元素个数
第二次遍历时将栈中的元素依次弹出赋值给数组。
代码二:
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[] array = new int[stack.size()];
for (int i = 0; i < size; i++) {
array[i] = stack.pop().val;
}
return array;
}
}
|