【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)
如题
- 动手之前,发现自己很擅长用C语言来写链表.
- 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧;毕竟,以后的若干年里都差不多要跟Java打交道了。
- 于是,先将Java版的链表自学了一下,其实思想差不多; 用对象替换C语言中的指针建立,特别简单又舒服! 然后逆序输出,再实现这个题目。
01. 先学着实现一个简单的Java版的单项链表
构建任意长度的任意数值的链表, 头插法,顺序遍历输出链表
package com.szs.list;
/**
* 单链表
* @author Administrator
*
*/
public class MyLinkedList {
public int data;
public MyLinkedList next;
public MyLinkedList(int data) {
this.data=data;
this.next=null;
}
public MyLinkedList() {
this.data=-1;
this.next=null;
}
}
02.编写上面的单项链表的逆序输出
高效的输出链表,直接使用栈来存储~~
package com.szs.list;
import java.util.Random;
import java.util.Stack;
public class InverseSingleList {
public static void main(String[] args) {
MyLinkedList head= new MyLinkedList();
createList(head);
inverseList(head);
}
/**
* 构建任意长度的任意数值的链表, 头插法
*/
public static void createList(MyLinkedList head) {
Random random = new Random(System.currentTimeMillis());
int len = random.nextInt(10);
for(int i=0;i<len;i++) {
int data = random.nextInt(100);
MyLinkedList next = new MyLinkedList(data);
next.next = head.next;
head.next = next;
}
/**
* 顺序遍历输出链表
*/
MyLinkedList head2 = head.next;
System.out.println("顺序");
while(head2!=null) {
System.out.print(head2.data+"\t");
head2=head2.next;
}
System.out.println("length="+len);
}
/**
* 高效的输出链表,使用栈来存储
*/
public static void inverseList(MyLinkedList head) {
MyLinkedList head2 = head.next;
Stack<Integer> stack = new Stack<>();
System.out.println("逆序");
while(head2!=null) {
stack.push(head2.data);
head2=head2.next;
}
while(!stack.isEmpty()) {
System.out.print(stack.pop()+"\t");
}
}
}
03.进行测试
顺序
25 69 10 28 23 89 32 2 23 length=9
逆序
23 2 32 89 23 28 10 69 25
-------
顺序
28 35 83 99 88 length=5
逆序
88 99 83 35 28
【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)的更多相关文章
- 已知链表头结点指针head,写一个函数把这个链表逆序
Node* ReverseList ( Node *head ) { if ( head == NULL || head->next == NULL ) return head; Node *p ...
- Vue.js 2 vs Vue.js 3的实现 – 云栖社区
Vue.js 2 vs Vue.js 3的实现 – 云栖社区 vue.js核心团队已经讨论过将在Vue3实现的变化.虽然API不会改变,但是数据响应机制(译者注:对数据改变的监听和通知)发生了变化.这 ...
- 云栖社区用机器人爬CSDN的文章?
这个云栖社区的文章https://yq.aliyun.com/ziliao/539322 这篇文章是我13年写的,不知道咋插入图片,见谅. 下面是我的文件记录 分享XAML图标的网站 原创 2013年 ...
- 我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
我的博客即将入驻"云栖社区",诚邀技术同仁一同入驻. 博客搬家邀请码NXLZV
- 阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天
阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天
- 云栖社区 Tensorflow快餐教程
云栖社区 Tensorflow快餐教程(1) - 30行代码搞定手写识别:https://yq.aliyun.com/articles/582122云栖社区 Tensorflow快餐教程(2) - 标 ...
- 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解
数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...
- c#编程:给定一个正整数求出是几位数并逆序输出
<span style="color:#FF0000;">第一步:把输入的数字转为字符串n.ToString() 第二步:求出字符串的长度即为正整数的位数 第三步:从后 ...
- Python实现按照指定要求逆序输出一个数字的方法
Python实现按照指定要求逆序输出一个数字的方法 这篇文章主要介绍了Python实现按照指定要求逆序输出一个数字的方法,涉及Python针对字符串的遍历.判断.输出等相关操作技巧,需要的朋友可以参考 ...
随机推荐
- spring boot使用AOP统一处理web请求
为了保证服务的高可用,及时发现问题,迅速解决问题,为应用添加log是必不可少的. 但是随着项目的增大,方法增多,每个方法加单独加日志处理会有很多冗余 那在SpringBoot项目中如何统一的处理Web ...
- ClickHouse中的循环复制集群拓扑
关系型数据库,但千万级表关联数据库基本上不太可能做到秒出:考虑过Sharding,但数据量大, 各种成本都很高:热数据存储到ElasticSearch,但无法跨索引关联,导致不得不做宽表, 因为权限, ...
- Mysql 中 int(3) 和 int(11) 的区别
[1]int(3) 和 int(11)的区别(思维惯性认知错误) 这里的3或11代表的是存储在数据库中的具体的长度,总以为int(3)只能存储3个长度的数字,int(11)只会存储11个长度的数字. ...
- 《学渣Linux笔记》——更改ls命令的输出颜色和命令提示符颜色(二)
<学渣Linux笔记>--更改ls命令的输出颜色和命令提示符颜色(二) II.更改命令提示符颜色 命令提示符的显示格式是由变量PS1决定的,首先我们查找GNU官方手册,发现如下内容(不是我 ...
- 《算法图解》全本PDF下载附百度云链接
作者使用Python和图画来解释算法,找了好久才找到PDF版本,末尾附百度云链接~ 作者[美]Aditya Bhargava 译者袁国忠 类别 出版 / 非虚构 出版社人民邮电出版社 / 2017-0 ...
- Gin上传文件到MongoDB gridfs
目录 上传图片 下载图片 上传图片 func imagePost(c *gin.Context) { image, err := c.FormFile("file") if err ...
- zookeeper从入门到精通视频教程(含网盘下载地址)
Zookeeper视频教程链接:https://pan.baidu.com/s/1V9YZN5F3sTKQJOhiDt9hnA 提取码:rtgl
- 深入玩转K8S之外网如何访问业务应用
有一个问题就是现在我的业务分配在多个Pod上,那么如果我某个Pod死掉岂不是业务完蛋了,当然也会有人说Pod死掉没问题啊,K8S自身机制Deployment和Controller会动态的创建和销毁Po ...
- c# sharepoint client object model 客户端如何创建中英文站点
c# sharepoint client object model 客户端如何创建中英文站点 ClientContext ClientValidate = tools.GetContext(Onlin ...
- 如何在一个Docker中同时运行多个程序进程?
我们都知道Docker容器的哲学是一个Docker容器只运行一个进程,但是有时候我们就是需要在一个Docker容器中运行多个进程 那么基本思路是在Dockerfile 的CMD 或者 ENTRYPOI ...