博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表List
阅读量:4306 次
发布时间:2019-06-06

本文共 2386 字,大约阅读时间需要 7 分钟。

 

 

 

当要创建一个链表的时候,首先要创建一个节点类,在Java里面叫条目(entry表示),这个类是一个嵌套类,里面包含三个要素,element, next, previous。

public class Link<E> {

private static class Entry<E> {
private E element;
private Entry<E> next;
private Entry<E> previous;
public Entry(E e, Entry<E> next , Entry<E> previous) {
this.element = e;
this.next = next;
this.previous = previous;
}
}
}

创建一个头结点和初始头结点,另外增加一个size用来统计节点数

public class Link<E> {

private transient Entry<E> header = new Entry<E>(null, null, null);
private transient int size = 0;
/**
* Constructs an empty list.
*/
public Link() {
header.next = header.previous = header;
}
private static class Entry<E> {
private E element;
private Entry<E> next;
private Entry<E> previous;
public Entry(E e, Entry<E> next , Entry<E> previous) {
this.element = e;
this.next = next;
this.previous = previous;
}
}
}

添加和获取、删除节点

package com.hyd.link;

import java.util.NoSuchElementException;

public class Link<E> {

private transient Entry<E> header = new Entry<E>(null, null, null);
private transient int size = 0;
/**
* Constructs an empty list.
*/
public Link() {
header.next = header.previous = header;
}
public int size() {
return this.size;
}
public boolean add(E e) {
addBefore(e, header);
return true;
}
public E get(int index) {
return entry(index).element;
}
public E remove(int index) {
return remove(entry(index));
}
private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size ++;
return newEntry;
}
/**
* Returns the indexed entry.
*/
private Entry<E> entry(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("Index: " + index +
", Size: " + size);
}
Entry<E> e = header;
if (index < (size >> 1)) {
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = size; i > index; i--)
e = e.previous;
}
return e;
}
private E remove(Entry<E> e) {
if (e == header)
throw new NoSuchElementException();

E result = e.element;

e.previous.next = e.next;
e.next.previous = e.previous;
e.next = e.previous = null;
e.element = null;
size--;
return result;
}
private static class Entry<E> {
private E element;
private Entry<E> next;
private Entry<E> previous;
public Entry(E e, Entry<E> next , Entry<E> previous) {
this.element = e;
this.next = next;
this.previous = previous;
}
}
}

 

 

转载于:https://www.cnblogs.com/handsome1013/p/5341396.html

你可能感兴趣的文章
Maven deploy部署jar到远程私服仓库
查看>>
2/19 福建四校联考
查看>>
abap 中modify 的使用
查看>>
tomcat调优方案Maximum number of threads (200) created for connector with address null and port 8091...
查看>>
java类的加载机制
查看>>
MDK linker和debug的设置以及在RAM中调试
查看>>
CocosCreator2.1.0渲染流程与shader
查看>>
制作新网络框架快速自动生成消息结构体的编辑器
查看>>
[转]Device Context 设备环境 设备上下文 理解
查看>>
事务的传播性和隔离级别
查看>>
2018.3.24 struct
查看>>
Linux系统删掉多个文件
查看>>
【随笔】Win7下GVIM的安装与配置
查看>>
协程,IO模式
查看>>
移动端meta标签
查看>>
是前端类库还是前端框架?
查看>>
解决glib2.0缺失问题 分类: LINUX 20...
查看>>
一些杂想
查看>>
js原型和原型链
查看>>
工作区和暂存区
查看>>