Java:双向链表反转实现
有个小需求要求实现一个双向链表的反转于是就有了下边代码:
链表元素结构定义:
package com.util;
public class LinkedNode<T>{
private T value;
private LinkedNode<T> prev;
private LinkedNode<T> next;
public LinkedNode(T value, LinkedNode<T> prev, LinkedNode<T> next) {
super();
this.value = value;
this.prev = prev;
this.next = next;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public LinkedNode<T> getPrev() {
return prev;
}
public void setPrev(LinkedNode<T> prev) {
this.prev = prev;
}
public LinkedNode<T> getNext() {
return next;
}
public void setNext(LinkedNode<T> next) {
this.next = next;
}
}
链表定义:
package com.util;
public class LinkedList<T>{
private transient int size=0;
private transient LinkedNode<T> first=null;
private transient LinkedNode<T> last=null;
/**
* 添加元素到双向链表头部
* */
public void addFirst(T t){
LinkedNode<T> oldFirst = first;
LinkedNode<T> newNode = new LinkedNode<T>(t, null,oldFirst);
first = newNode;
if (oldFirst == null)
last = newNode;
else
oldFirst.setPrev(newNode);
size++;
}
/**
* 将双向链表转化为一元数组:從頭開始循環到尾部。
* */
public Object[] toArray() {
Object[] result = new Object[size];
int i = 0;
for (LinkedNode<T> node = first; node != null; node = node.getNext())
result[i++] = node.getValue();
return result;
}
/**
* 反轉
* */
public void reverse(){
if(first==null||last==null)
return;
LinkedNode<T> prev;
LinkedNode<T> next;
LinkedNode<T> newFirst=null;
LinkedNode<T> newLast=null;
for (LinkedNode<T> node = first; node != null; node = node.getPrev()){
prev= node.getPrev();
next= node.getNext();
if(node.getPrev()==null){
newLast=node;
}else if(node.getNext()==null){
newFirst=node;
}
node.setNext(prev);
node.setPrev(next);
}
first=newFirst;
last=newLast;
}
}
备注:这里主要实现了三个功能,在链表头部添加元素、toArray函数、反转函数,实际上链表应该包含其他功能:末尾添加元素,插入元素,索引,移除,遍历等。
测试代码:
import com.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args) {
LinkedList<String> list=new LinkedList<String>();
list.addFirst("5");
list.addFirst("3");
list.addFirst("1");
for (Object string : list.toArray()) {
System.out.println(string);
}
System.out.println("-------------------------------開始反轉-------------------------------");
list.reverse();
System.out.println("-------------------------------結束反轉-------------------------------");
for (Object string : list.toArray()) {
System.out.println(string);
}
}
}
Java:双向链表反转实现的更多相关文章
- Java 控制反转和依赖注入模式【翻译】【整理】
Inversion of Control Containers and the Dependency Injection pattern --Martin Fowler 本文内容 Component ...
- java控制反转与依赖注入
1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...
- java 字符串反转
描述:给我一个字符串,例如I love java,输出: java love I 方法一 public class StringReverse { public void swap(char[] ...
- 【Java SE】如何用Java实现反转排序
摘要:反转排序是将原先已经排序好了的重新排序,是原来的数组元素的顺序反转过来.假设原来的数组顺序是{6,5,4,3,2,1},反转之后的顺序就是{1,2,3,4,5,6}.这个排序的算法不是很难,代码 ...
- java 控制反转和依赖注入的理解
开始好好学习java基础和思想~ 控制反转(IOC)是Spring框架的核心思想,用我自己的话说,就是你要做一件事,别自己可劲new了,你就说你要干啥,然后外包出去就好~ 依赖注入(DI) 在我浅薄的 ...
- 如何用Java实现反转排序
摘要:反转排序是将原先已经排序好了的重新排序,是原来的数组元素的顺序反转过来.假设原来的数组顺序是{6,5,4,3,2,1},反转之后的顺序就是{1,2,3,4,5,6}.这个排序的算法不是很难,代码 ...
- Java程序设计——反转字符串 & 找朋友 & 计算int型二进制1的个数 & 情报加密 & 计算日期 & 求近似数 & 输出较小数(练习1)
作为刚刚入门Java的选手,其实C++的功底起到了很大的作用.但是,Java之于C++最大的不同,我个人认为,是其类的多样性.才入门的我,写着老师布置的简单的面对过程的题,如果是C++,可以算是简单了 ...
- Java基础-反转数组
/** java基础,如何将一个数组反转,思考方法采用使用临时变量的情况下,将第一个元素与第二个元素进行反转,需要定义两个索引,一个记录数组的第一个元素与最后一个元素,将其两两交换* */public ...
- JAVA双向链表
1.链表是一种重要的数据结构,在程序设计中占有很重要的地位 2.我们可以用类List来实现链表结构,用变量Head.Tail.Length.Pointer来实现表头.存储当前结点的指针时有一定的技 巧 ...
随机推荐
- 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解
马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...
- 导入导出CSV
const string dataPath = @"D:\Users\jin_h\Documents\Visual Studio 2013\Projects\ConsoleApplicati ...
- java 虚拟机启动参数 (转)
在Java.J2EE大型应用中,JVM非标准参数的配置直接关系到整个系统的性能. JVM非标准参数指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置.但是在生产环境中,为了提 ...
- LPC18xx/43xx SWD/JTAG Debug Connector
- 详解Java Spring各种依赖注入注解的区别
注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.Controller.Repository.Comp ...
- sql语句 update 字段=字段+字符串
update aa set name=concat('x',name) SELECT OWNER,phone ,COUNT(fc_hc) as c from tb_p GROUP BY fc_hc H ...
- WebView入门
webview是Android展示网页信息的控件,本文就来简要讲解这个控件的用法.关于webview我找到了一些很不错的文章,我就直接贴上连接,自己就不重复造轮子了.本文仅写出我本人目前使用过的东西, ...
- Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载
在使用这个框架的时候,我们必须要配置一个DisplayImageOptions对象来作为ImageLoader.getInstance().displayImage()中的参数,所以很有必要讲解这个对 ...
- [转]PHP之APC缓存详细介绍(学习整理)
From : http://www.2cto.com/kf/201210/160140.html 1.APC缓存简介APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存 ...
- [转]通过查看mysql 配置参数、状态来优化你的mysql
From : http://wangwei007.blog.51cto.com/68019/967278 mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status ...