https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
在这里用三种方法实现,分别用栈结构、数组逆置以及递归来实现
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//利用栈 先进后出的特性保存起来
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.add(listNode.val);
listNode = listNode.next;
}
//在放在新的arrayList中
ArrayList<Integer> arrayList = new ArrayList<>();
while (!stack.empty()) {
arrayList.add(stack.pop());
}
return arrayList;
}
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
// 利用数组进行逆置
ArrayList<Integer> arrayList = new ArrayList<>();
while (listNode != null) {
arrayList.add(listNode.val);
listNode = listNode.next;
}
int i = 0;
int j = arrayList.size() - 1;
for (; i < j; ) {
int tmp = arrayList.get(i);
arrayList.set(i, arrayList.get(j));
arrayList.set(j, tmp);
i++;
j--;
}
return arrayList;
}
// 递归
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> arrayList= new ArrayList<>();
printListFromTailToHeadHelper(arrayList,listNode);
return arrayList;
}
private void printListFromTailToHeadHelper(ArrayList<Integer> arrayList, ListNode listNode) {
if (listNode == null) {
return;
}
printListFromTailToHeadHelper(arrayList, listNode.next);
arrayList.add(listNode.val);
}