题目链接:https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking
题目描述:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:
可以先从头到尾对链表中的值进行存储,然后将存储的数据从尾到头进行返回。
首先遍历从头到尾,需要的是从尾到头,符合数据结构中栈的特点,”后进先出“,因此我们可以使用栈进行开发。
代码实现:
public class PrintNodeByTail {
static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
//使用两个链表
public static ArrayList<Integer> printList(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
ArrayList<Integer> list1 = new ArrayList<>();
while (listNode != null) {
list.add(listNode.val);
listNode = listNode.next;
}
for (int i = list.size() - 1; i >= 0; i--) {
list1.add(list.get(i));
}
return list1;
}
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode){
//定义一个栈堆,利用栈的特性 先进后出的,取出来的的时候就实现了从尾部打印到头部
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> list = new ArrayList<>();
while (!stack.isEmpty()) {
//将出栈的元素取出来放在list集合中
list.add(stack.pop());
}
return list;
}
public static void main(String[] args) {
ListNode list1Node1 = new ListNode(2);
ListNode list1Node2 = new ListNode(4);
ListNode list1Node3 = new ListNode(3);
list1Node1.next = list1Node2;
list1Node2.next = list1Node3;
System.out.println(printListFromTailToHead(list1Node1));
System.out.println(printList(list1Node1));
}
}