Java 数据结构之双链表

package Linked;
public class Mylinked {
private Node first;//链表的第一个节点
private Node last;//链表的最后一个节点
private int size = 0;//节点的数量
public Node search(Object ele) {
Node current = this.first;
for (int i = 0; i < size; i++) {
if (!current.ele.equals(ele)) {
if (current.next == null) {
return null;
}
current=current.next;
}
}
return current;
}
public void remove(Object ele) {
//找到被删除的节点
Node current = this.first;
for (int i = 0; i < size; i++) {
if (!current.ele.equals(ele)) {
if (current.next == null) {
return;
}
current=current.next;
}
}
//删除节点
if(current==first){
this.first=current.next;
this.first.prev=null;
}else if(current==last){
this.last=current.prev;
this.last.next=null;
}else{
//把删除当前节点下一个节点作为删除节点上一个节点的下一个节点
current.prev.next=current.next;
//把删除节点的上一个节点作为删除节点的下一个节点的上一个节点
current.next.prev=current.next;
}
size--;
}
public void addFirst(Object ele) {
Node node = new Node(ele);//需要保存的节点对象
if (size == 0) {//当链表中没有节点的时候
this.first = node;
this.last = node;
} else {
node.next = this.first;//把之前的第一个节点作为新增的第一个节点的下一个节点
this.first.prev = node;//把新增节点作为第一个节点的上一个节点
this.last = node;//把新增节点作为第一个节点
}
size++;
}
public void addLast(Object ele) {//在最后一个节点插入数据
Node node = new Node(ele);//需要保存的节点对象
if (size == 0) {//当链表中没有节点的时候
this.first = node;
this.last = node;
} else {
this.last.next = node;//把新增的节点作为最后一个的下一个节点
node.prev = this.last;//把之前最后一个节点作为新增节点的上一个节点
this.last = node;//把新增的节点作为最后一个节点
}
size++;
}
public String toString() {//覆盖父类中的方法
if (size == 0) {
return "[ ]";
}
StringBuffer sb = new StringBuffer(size * 2 + 1);
Node current = this.first;//第一个节点
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(current.ele);
if (i != size - 1) {
sb.append(",");
} else {
sb.append("]");
}
current = current.next;//获取自己的下一个节点
}
return sb.toString();
}
class Node {
Node prev;//上一个节点对象
Node next;//下一个节点对象
Object ele;//当前节点中存储的数据
public Node(Object ele) {
this.ele = ele;
}
}
}
package Linked;
public class MylinkedDemo {
public static void main(String[] args) {
Mylinked list=new Mylinked();
list.addFirst("a");
list.addLast("b");
list.addLast("c");
list.addLast("d");
list.addLast("e");
System.out.println(list);
list.remove("c");
System.out.println(list);
}
}

Java 数据结构之双链表的更多相关文章
- Java数据结构和算法 - 链表
Q: 为什么要引入链表的概念?它是解决什么问题的? A: 数组作为数据存储结构有一定的缺陷,在无序数组中,搜索是低效的:而在有序数组中,插入效率又很低:不管在哪一个数组中删除效率都很低:况且一个数组创 ...
- java 数据结构与算法---链表
原理来自百度百科 一.链表的定义 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运 ...
- Java数据结构——用双端链表实现队列
//================================================= // File Name : LinkQueue_demo //---------------- ...
- java数据结构之三叉链表示的二叉树
三叉链表示的二叉树定义所畏的三叉链表示是指二叉树由指向左孩子结点.右孩子结点.父亲结点[三叉]的引用(指针)数据和数据组成. package datastructure.tree.btree; ...
- 图解Java数据结构之环形链表
本篇文章介绍数据结构中的环形链表. 介绍 环形链表,类似于单链表,也是一种链式存储结构,环形链表由单链表演化过来.单链表的最后一个结点的链域指向NULL,而环形链表的建立,不要专门的头结点,让最后一个 ...
- Java数据结构之单链表
这篇文章主要讲解了通过java实现单链表的操作,一般我们开始学习链表的时候,都是使用C语言,C语言中我们可以通过结构体来定义节点,但是在Java中,我们没有结构体,我们使用的是通过类来定义我们所需要的 ...
- Java数据结构-03单链表(二)
在之前我们封装了一些操作在接口类中,并在抽象类实现了相同的方法.下面我们开始写代码: 无头结点单链表:(注意下面的AbstractList是之前抽取的类,不是java.util包下的类) public ...
- golang数据结构之双链表
目录结构: doubleLink.go package link import ( "fmt" ) //HerosNode 链表节点 type HerosNode struct { ...
- 图解Java数据结构之单链表
本篇文章介绍数据结构中的单链表. 链表(Linked List)介绍 链表可分为三类: 单链表 双向链表 循环列表 下面具体分析三个链表的应用. 单链表 链表是有序的列表,它在内存中存储方式如下: 虽 ...
随机推荐
- Python学习系列(五)(文件操作及其字典)
Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...
- mysql权限验证流程
mysql用户管理,逐级下查 mysql库的user表连接信息,全局权限db表记录用户对库的权限,对某个数据库的所有表的权限tables_priv 设置用户对表的权限columns_priv设置用户对 ...
- ubuntu上安装Adminer
Apache 安装 $ sudo apt-get install apache2 php 安装 $ sudo apt-get install php7.0 $ sudo apt-get install ...
- 数据的持久性存储(二)——CoreData(附Demo)
CoreData是一款稳定.功能全面的持久性工具.(本文参考iphone开发3所写,比较简要,需详细了解可以参考iphone开发3) 首先创建一个新的项目CoraData,记得勾选Use Core D ...
- java图形用户界面练习。j2se
总结:主要是如何布局.还是存在很大问题 package clientFrame; import java.awt.FlowLayout; import javax.swing.JButton; imp ...
- Avro之一:Avro简介
一.引言 1. 简介 Avro是Hadoop中的一个子项目,也是Apache中一个独立的项目,Avro是一个基于二进制数据传输高性能的中间件.在Hadoop的其他项目中例如HBase(Ref)和Hiv ...
- 网络编程Socket之wireshark使用
这里只对wireshark进行简单的使用介绍.里面的报表,IO图形分析等以后再谈.... 这里不提供下载地址了,不是什么稀有资源,我使用的wireshark是在百度软件中心下载的. 第一步:选择需要 ...
- phpmailer绑定邮箱
1.配置 <?php return array ( 'email_host' => 'smtp.aliyun.com', 'email_port' => '25', 'email_u ...
- VC++使用TCHAR
#ifdef _UNICODE #define tcout wcout #define tcin wcin #else #define tcout cout #define tcin cin #end ...
- rpm yum 等命令无响应的解决方法
yum 安装查询任何东西, rpm 安装查询任何东西,执行后无任何反应,直接卡住,也没任何错误信息给出,只能杀掉进程 # yum install XXXX # yum clean all # rpm ...