数据结构-双链表
来源:互联网 发布:伴奏提取软件 编辑:程序博客网 时间:2024/05/16 14:49
http://www.cnblogs.com/skywang12345/p/3561803.html
public class DoubleLink<T>{
private DNode<T> mHead;
private int mCount;
class DNode<T>{
private DNode prev;
private DNode next;
private T value;
public DNode(T value,DNode prev,DNode next){
this.value = value;
this.prev = prev;
this.next = next;
}
}
public DoubleLink(){
mHead = new DNode<T>(null, null, null);
mHead.prev = mHead.next = mHead;
mCount = 0;
}
public int size(){
return mCount;
}
public boolean isEmpty(){
return mCount == 0;
}
private DNode<T> getNode(int index){
if(index < 0 || index >= mCount){
throw new ArrayIndexOutOfBoundsException();
}
if(index <= mCount/2){
DNode<T> node = mHead.next;
for(int i = 0;i < index; i++){
node = node.next;
}
System.out.println("t1:" +node.prev.value + " " + node.value+" " + node.next.value);
return node;
}
DNode<T> prveNode = mHead.prev;
int pIndex = mCount -index -1;
for(int i= 0;i < pIndex;i++){
prveNode = prveNode.prev;
}
System.out.println("t2:" +prveNode.prev.value + " " + prveNode.value+" " + prveNode.next.value);
return prveNode;
}
public DNode<T> get(int index){
return getNode(index);
}
public T getFirst(){
return getNode(0).value;
}
public T getLast(){
if(isEmpty()){
throw new ArrayIndexOutOfBoundsException();
}
return getNode(mCount-1).value;
}
/**
* 在之前插入
* @param index
* @param value
*/
public void insert(int index,T value){
if(index == 0){
DNode<T> dnt = new DNode<T>(value, mHead, mHead.next);
mHead.next.prev = dnt;
mHead.next = dnt;
mCount++;
return;
}
DNode<T> dnt= getNode(index);
DNode<T> pDnt = new DNode<T>(value,dnt.prev,dnt);
dnt.prev.next =pDnt;
dnt.prev =pDnt;
mCount++;
return;
}
public void insertFirst(T value){
insert(0, value); }
public void append(T value){
if(isEmpty()){
insertFirst(value);
}else{
DNode<T> lastNode = getNode(mCount -1);
DNode<T> node = new DNode<T>(value,lastNode,lastNode.next);
lastNode.next.prev = node;
lastNode.next = node;
mCount++;
//lastNode.next.prev = node;
}
}
public void del(int index){
DNode<T> node = getNode(index);
node.prev.next = node.next;
node.next.prev = node.prev;
node = null;
mCount --;
return;
}
public void delFirst(){
del(0);
}
public void delLast(){
del(mCount -1);
}
public static void main(String[] args) {
DoubleLink<Integer> dlink = new DoubleLink<Integer>();
dlink.insertFirst(30);
dlink.insert(0,20);
dlink.insert(0,10);
dlink.insert(1, 15);
dlink.insert(3, 25);
dlink.append(40);
dlink.append(50);
dlink.del(1);
for (int i=0; i<dlink.size(); i++){
System.out.println("dlink("+i+")="+ dlink.get(i).value);
}
}
}
- 数据结构-双链表
- [数据结构]双链表
- 数据结构-双链表
- 数据结构-双链表
- 数据结构学习之双链表
- 数据结构实现循环双链表
- 数据结构-双链表
- 数据结构之双链表
- 数据结构--循环双链表
- 数据结构之双链表
- 数据结构c++实现----双链表
- 【数据结构】双链表的演示
- 数据结构之双链表
- 数据结构之双链表
- 数据结构之双链表
- 数据结构—双链表实现
- 数据结构之双链表
- 【数据结构】双链表(c++)
- HDU 3555 Bomb
- 编程之美-重建二叉树方法整理
- Android Jni 多线程 蓝牙串口收发 实例 二
- liberty版本openstack按照官方文档安装部署dashboard上不显示cinder模块
- Android快速SDK(5)联网请求库QuickHttp
- 数据结构-双链表
- AsyncTask详解
- CDH离线安装手册
- eclipse+tomcat+jvm,刚刚参加工作的一些简单问题
- Chrome内核解析 -- 绘制引擎提高篇:Command Buffer代码解析
- 使用yum方式在CentOS上安装Java环境,系统以CentOS6.4为例
- oracle用户创建及权限设置
- ArrayList转换为数组
- ScrollView中listview显示不全的问题