题目描述
输入一个链表,从尾到头打印链表每个节点的值。
思路解析
第一种方法:遍历链表,将节点的值压入栈。然后栈弹出的过程,就是逆序的过程;
第二种方法:遍历链表,不断地将节点的值添加到另外一个链表的头位置,这也是逆序的过程;
第三种方法:利用递归,递归到最里面那层,从最里面的那层外退的过程就是逆序的过程;
代码
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//第一种方法,用栈
Stack<Integer> stack = new Stack<>();
while(listNode != null){
//遍历链表,将节点的值压入栈
stack.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> arrayList = new ArrayList<Integer>();
while(!stack.empty()){
//栈弹出的过程,就是从尾到头将链表的节点值输出的过程
arrayList.add(stack.pop());
}
return arrayList;
}
}
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//第二种方法
ArrayList<Integer> result = new ArrayList<>();
while(listNode != null) {
//将节点的值添加到新链表的头位置
result.add(0, listNode.val);
listNode = listNode.next;
}
return result;
}
}
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//第三种方法,利用递归
ArrayList<Integer> result = new ArrayList<>();
name(result, listNode);
return result;
}
public void name(ArrayList<Integer> result,ListNode listNode) {
if (listNode != null) {
name(result, listNode.next);
result.add(listNode.val); //这里是重点
}
}
}