原题链接
题目描述
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例
输入:head = [1,3,2] 输出:[2,3,1]
解题思路
- 常规思路 逆置该链表,然后再对该链表进行遍历,将元素添加至创建的数组中,返回该数组。(要注意判空)。(头插法逆置)
- 利用栈的特点 利用栈先入后出的特点,对该链表进行遍历,对遇到的元素都压入栈,然后创建数组把栈中的元素逐个pop出,所得数组即从尾到头的顺序。
代码
//逆置链表遍历
class Solution {
public int[] reversePrint(ListNode head) {
if(head==null){
return new int[0];
}
int len=0;
ListNode p=head;
ListNode cur1=p.next;
ListNode cur2=cur1;
while(cur2!=null){
cur2=cur2.next;
cur1.next=p;
p=cur1;
cur1=cur2;
len++;
}
len+=1;
int []nums=new int [len];
int i=0;
head.next=null;
while(p!=null){
nums[i++]=p.val;
p=p.next;
}
return nums;
}
}
//栈:先入后出
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;
}
}