题目描述
输入一个链表,从尾到头打印链表每个节点的值。
import java.util.ArrayList;
public class TestLinkList {
//保存递归数据
private ArrayList<Integer> arrayList = new ArrayList<>();
public static void main(String[] args) {
TestLinkList linkList = new TestLinkList();
ListNode listNode1 = linkList.new ListNode(1);
ListNode listNode2 = linkList.new ListNode(2);
ListNode listNode3 = linkList.new ListNode(3);
ListNode listNode4 = linkList.new ListNode(4);
ListNode listNode5 = linkList.new ListNode(5);
listNode1.next = listNode2;
listNode2.next = listNode3;
listNode3.next = listNode4;
listNode4.next = listNode5;
ArrayList<Integer> arrayList2 = new TestLinkList().printListFromTailToHead2(listNode1);
System.out.println(arrayList2.toString());
}
/**
* 递归, 效果等同于栈
*/
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode != null) {
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
/**
* 正向遍历节点所有值放在ArrayList,然后倒序输出
*/
public ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
if (listNode == null) {
return new ArrayList<>();
}
ArrayList<Integer> arrayList = new ArrayList<>(); // 存放正序值
ArrayList<Integer> revArrayList = new ArrayList<>();// 存放倒序值
while (listNode != null) {
arrayList.add(listNode.val);
listNode = listNode.next;
}
for (int i = arrayList.size() - 1; i >= 0; i--) {
revArrayList.add(arrayList.get(i));
}
return revArrayList;
}
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
ListNode() {
}
}
}