热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[剑指Offer]面试题3:使用Java实现从链表尾部到头部的打印功能(基于栈结构)

【问题描述】给定一个单向链表,要求使用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);

推荐阅读
author-avatar
滴滴答2502906673
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有