题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
我的解法
我的解法思路:我的做法中规中矩,先循环取出链表的所有值,然后用arraylist去接收,然后递减调换两端的索引对应的值即可。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(listNode != null){
ListNode cur = listNode;
while(cur != null){
ListNode next = cur.next;
list.add(cur.val);
cur = next;
}
int i = 0;
int j = list.size() - 1;
while(i <= j){
int temp = list.get(i);
list.set(i,list.get(j));
list.set(j,temp);
i++;
j--;
}
}
return list;
}
}
&&注意链表while循环判断的是cur != null而不是cur.next != null;不要死记硬背!
&&arraylist的自带函数非常不熟悉。。。
最优解法
最优解法思路:
链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035?f=discussion
来源:牛客网
//java 递归超简洁版本
public class Solution {
ArrayList<Integer> arrayList=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
}