作者:滴滴答2502906673 | 来源:互联网 | 2024-11-11 16:28
【问题描述】给定一个单向链表,要求使用Java编程语言实现从链表尾部到头部的逆序打印功能。该功能通过利用栈的数据结构来实现,最终将结果存储在一个ArrayList中返回。具体实现步骤如下:1.遍历链表,将每个节点的值依次压入栈中。2.从栈中逐个弹出元素,并将其添加到ArrayList中。3.返回包含逆序链表元素的ArrayList。这种方法充分利用了栈的后进先出特性,确保链表元素能够按照从尾到头的顺序被正确处理。
【问题描述】
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
【解答思路】
1.ArrayList遍历接收,翻转
import java.util.ArrayList;
import java.util.Collections;
public class Solution {public ArrayList printListFromTailToHead(ListNode listNode) {ArrayList list = new ArrayList();while(listNode != null){list.add(listNode.val);listNode = listNode.next;}Collections.reverse(list);//使用Collections的reverse方法,直接将list反转return list;}
}
2.想到栈的特性先入后出,完成逆序
import java.util.ArrayList;
import java.util.Stack;
public class Solution {public ArrayList printListFromTailToHead(ListNode listNode) {Stack stack=new Stack();while(listNode!=null){stack.push(listNode.val);listNode=listNode.next; }ArrayList list=new ArrayList();while(!stack.isEmpty()){list.add(stack.pop());}return list;}
}
3.递归实现 (递归的本质还是使用了堆栈结构)
import java.util.ArrayList;
import java.util.Stack;
public class Solution {public ArrayList printListFromTailToHead(ListNode listNode) {ArrayList list=new ArrayList();ListNode pNode=listNode;if(pNode!=null){if(pNode.next!=null){list=printListFromTailToHead(pNode.next);}list.add(pNode.val);}return list;}
}
【总结】
1.链表基础知识
LinkedList lList = new LinkedList();
while(listNode!=null){listNode=listNode.next; }
2.堆栈基本操作
Stack stack=new Stack();
while(!stack.isEmpty())
{x = stack.pop();
}
stack.push(val);