链表 java详解_链表详解——Java版
什么是链表?
链表是一个线性结构,但是存储的数据可以是非线性的。链表由一个个子节点构成,每个节点有两个部分:数据域和指针域,数据域就是实际存储数据的,指针域可以有一个和两个,单链表就是单个指针域指向后一个节点,双链表就是节点有两个指针域,分别指向前一个和后一个节点。
链表的核心:
链表的核心就是指针域,通过对指针域的操作实现增加节点删除节点,所谓链表就是形象的表示出一环扣一环,这是链表的优点也是缺点,优点是:插入删除不需要移动所有节点,只需要将待插入的节点的指针域一个指向待插入位置的后一个节点,一个指向前一个节点;缺点就是搜索的时候必须遍历节点。
Java实现链表基本操作
//一个节点
class Node {
public Node next;
public Node prev;
public E item;
public Node(E data) {
this.item = data;
next = null;
prev = null;
}
}
public class MyLinkedList {
private Node head; //表头
private Node tail; //表尾
private int size; //表长
public MyLinkedList() {
size = 0;
head = null;
tail = null;
}
public int size() {
return this.size;
}
public void add(E o) { //将o增加到链表尾部
Node tempNode = new Node(o);
if(size == 0){ //节点为空节点的时候
head = tempNode;
tail =tempNode;
}else {
tail.next = tempNode;
tempNode.prev = tail;
tail = tempNode;
}
size++;
}
public E remove() { //从头移除元素
return removeFirst();
}
public void showList(){
Node tempNode = head;
while(tempNode != null){
System.out.println(tempNode.item + " ");
tempNode = tempNode.next;
}
}
public void showListRevise(){
Node tempNode = tail;
while(tempNode != null){
System.out.println(tempNode.item + " ");
tempNode = tempNode.prev;
}
}
public E remove(int index) { //删除指定位置的元素
Node tempNode;
Node resultNode;
if(index<0 || index>size){
return null;
}else {
if (index < (size >> 1)) {
tempNode = head;
for(int i=0;i
tempNode = tempNode.next;
Node par = tempNode.prev;
Node ch = tempNode.next;
tempNode.prev.next = tempNode.next;
tempNode.next.prev = tempNode.prev;
resultNode = tempNode;
} else {
tempNode = tail;
for(int i=size-1;index
tempNode = tempNode.prev;
resultNode = tempNode;
tempNode = tempNode.prev;
}
size--;
return resultNode.item;
}
}
public boolean remove(Object o) {
return removeFirstOccurrence(0);
}
public E removeFirst() {
Node tempNode;
if(size>0){
tempNode = head;
head = head.next;
head.prev = null;
size--;
return tempNode.item;
}else
return null;
}
public E removeLast() {
E temp = tail.item;
tail = tail.prev;
tail.next = null;
size--;
return temp;
}
public boolean removeFirstOccurrence(Object o){ //删除此列表中指定元素的第一个出现(从头到尾遍历列表时)。
int tempSize = size;
Node tempNode = head;
for(int i=0;i
if(tempNode.item.equals(o)){
tempNode.prev = tempNode.next;
tempNode.next = tempNode.prev;
size--;
return true;
}
}
return false;
}
public void addFirst(E o) { //将o插入链表开头
Node tempNode = new Node(o);
if(size==0){
head = tempNode;
tail = tempNode;
}else {
tempNode.next = head;
tempNode.prev = null; //前一个节点是空
head = tempNode;
}
size++;
}
public void addLast(E o) { //将o增加到链表尾部
Node tempNode = new Node(o);
if(size==0){
head = tempNode;
tail = tempNode;
}else {
tail.next = tempNode;
tempNode.prev = tail;
tail = tempNode;
}
size++;
}
public void clear() { //清空链表
head = null;
tail = null;
size = 0;
}
public boolean contains(E o) { //判断元素o是否包含于链表
int tempSize = size;
Node tempNode = head;
Boolean result = false;
while (tempSize != 0) {
Object o1 = tempNode.item;
if(o.equals(o1)){
result = true;
}
tempNode = tempNode.next;
tempSize--;
}
return result;
}
public E get(int index) { //获取指定节点
Node tempNode;
if(index < 0 || index >= size) {
return null;
}else {
if(index < (size >> 1)) { //右移
tempNode = head;
for(int i=0;i
tempNode = tempNode.next;
return tempNode.item;
}else {
tempNode = tail;
for (int i = size-1; index < i; i--) {
System.out.println(index+ " " + i);
tempNode = tempNode.prev;
}
return tempNode.item;
}
}
}
}
链表 java详解_链表详解——Java版相关推荐
- java 委托机制_通过反射实现Java下的委托机制代码详解
简述 一直对Java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块API public Class Delegater()//空参构造,该类管理委托实例并 ...
- java 7 反射_【7】java 反射详解
[7]java 反射详解 获取Class对象的方式: 1. Class.forName("全类名"); 将字节码加载进内存,返回Class对象,多用于配置文件,将类名定义在配置文件 ...
- java架构师_成为一名Java高级架构师究竟要学哪些东西??
Java架构师,应该算是一些Java程序员们的一个职业目标了吧.很多码农码了五六年的代码也没能成为架构师.那成为Java架构师要掌握哪些技术呢,总体来说呢,有两方面,一个是基础技术,另一个就是组织能力 ...
- 做Java头发少_这35个Java代码优化细节,你用了吗
链接:https://www.jianshu.com/p/6e472304b5ac 前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有 ...
- java应用开发_开发简单的Java应用
第一章 开发简单的Java应用 1.Java语言的技术分类 (1)JavaSE:标准版,开发桌面应用 (2)JavaEE:企业版,Web应用 (3)JavaME:小型版,嵌入式 2.如何开发和运行Ja ...
- java 双向链表循环_双向循环链表的Java版本实现
1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...
- 孙鑫java基础视频教程_孙鑫老师JAVA无难事视频教程 最适合java入门学习打基础的课程 附源码讲义 12课...
课程介绍 由孙鑫老师亲自授课录制.内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手. 由孙鑫老师亲自授课录制.内容涵盖 ...
- 我的世界中国版java模组_我的世界中国版下载,我的世界中国版下载不了mod
我的世界中国版下载,我的世界中国版下载不了mod 来源:互联网/编辑:佚名/时间:2020-10-10 在手机上看 扫一扫进入手机端 我的世界电脑版怎么下载地? 有一个我的世界的软件叫麦块,这个软件里 ...
- java python算法_用Python,Java和C ++示例解释的排序算法
java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...
- java 判断类型_如何快速入门Java编程学习(干货)
一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...
最新文章
- 混合密度网络(MDN)进行多元回归详解和代码示例
- Final Cut Pro快捷键
- 以太网和路由设置,内网和外网同时上
- 高擎信息安全大旗,打造“互联网+”新服务模式
- mac下hive-2.2.0-src版本的编译
- python3处理大文件
- How to Run Mac OS X in VirtualBox on Windows
- java实现5 4 3 2 1递归_递归及递归的使用
- 1024程序员节 | 近300本python电子书推荐
- 在Windows下配置svn服务端钩子程序
- html中含有value属性的标签及Value的作用
- dry的原理_【面板制程刻蚀篇】史上最全Dry Etch 分类、工艺基本原理及良率剖析...
- linux下gbd调试基础
- Scrach基本概念与操作
- java中static什么意思_Java中static的含义和用法
- 巧用“谷歌学术”,轻松完成参考文献
- 中国象棋对弈系统java的程序包谁有?
- SpringCloud和SpringCloudAlibaba的区别
- win2K3安装sql2000提示“安装程序配置服务器失败”的常见解决办法
- 搞笑不需要理由,搞笑就是理由!