链表操作(从尾到头打印数字)
题目:
输入一个链表的头结点,从尾到头返过来打印出每个节点的值,链表的定义如下:
class ListNode{
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}
解决方法:
思路一:
利用栈的数据结构,将链表遍历一遍,保存在栈中,利用栈的特性,先进后出,依次将栈中的数据保存在ArrayList中
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
//使用头插法实现链表的反转
Stack <Integer> stack = new Stack();
ListNode p = listNode;
while(p!=null){
stack.push(p.val);
p = p.next;
}
while(!stack.isEmpty()){
list.add(stack.pop());
}
return list;
}
思路二:
使用递归调用的方法
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
listReverse(listNode,list);
return list;
}
private void listReverse(ListNode node ,ArrayList<Integer> list ){
if(node!=null){
if(node.next!=null){
listReverse(node.next,list);
}
list.add(node.val);
}
}