简单实现 linkedList 双向链表
来源:互联网 发布:淘宝开店认证需要什么 编辑:程序博客网 时间:2024/05/16 04:45
package com.collection;
import java.util.LinkedList;
class Entry
{
public Object obj;
public Entry next;
public Entry previous;
public Entry ( Object obj, Entry next, Entry prvious )
{
this.obj = obj;
this.next = next;
this.previous = prvious;
}
}
public class MyLinkedList
{
private Entry header = new Entry(null, null, null);
private int size;
public MyLinkedList ()
{
header.next = header.previous = header;
}
public int size ()
{
return size;
}
public Entry remove ( int index )
{
Entry entry = get(index);
if ( entry == header )
throw new RuntimeException("头结点不能删除");
entry.next.previous = entry.previous;
entry.previous.next = entry.next;
size--;
return entry;
}
public Entry remove ( Object obj )
{
Entry entry = header;
for ( int i = 0; i < size; i++ )
{
entry = entry.next;
if ( entry.obj.equals(obj) )
{
return remove(i);
}
}
return null;
}
public void add ( Object obj, Entry entry )
{
Entry newEntry = new Entry(obj, entry, entry.previous);
newEntry.next.previous = newEntry;
newEntry.previous.next = newEntry;
size++;
}
public void add ( Object obj )
{
add(obj, header);
}
public void add ( Object obj, int index )
{
add(obj, index == size ? header : get(index));
}
public Entry get ( int index )
{
if ( index < 0 || index >= size )
{
throw new RuntimeException("下标越界");
}
Entry entry = header;
if ( index > size >> 1 )
{
for ( int i = 0; i < size - index; i++ )
{
entry = entry.previous;
}
}
else
{
entry = entry.next;
for ( int i = 0; i < index; i++ )
{
entry = entry.next;
}
}
return entry;
}
public static void main ( String [] args )
{
MyLinkedList link = new MyLinkedList();
link.add("22222");
link.add("33333");
link.add("44444");
link.add("55555");
link.add("66666", 1);
for ( int i = 0; i < link.size(); i++ )
{
System.out.println( ( (Entry) link.get(i) ).obj);
}
System.out.println("....................");
// link.remove(1);
link.remove("33333") ;
for ( int i = 0; i < link.size(); i++ )
{
System.out.println( ( (Entry) link.get(i) ).obj);
}
}
}
import java.util.LinkedList;
class Entry
{
public Object obj;
public Entry next;
public Entry previous;
public Entry ( Object obj, Entry next, Entry prvious )
{
this.obj = obj;
this.next = next;
this.previous = prvious;
}
}
public class MyLinkedList
{
private Entry header = new Entry(null, null, null);
private int size;
public MyLinkedList ()
{
header.next = header.previous = header;
}
public int size ()
{
return size;
}
public Entry remove ( int index )
{
Entry entry = get(index);
if ( entry == header )
throw new RuntimeException("头结点不能删除");
entry.next.previous = entry.previous;
entry.previous.next = entry.next;
size--;
return entry;
}
public Entry remove ( Object obj )
{
Entry entry = header;
for ( int i = 0; i < size; i++ )
{
entry = entry.next;
if ( entry.obj.equals(obj) )
{
return remove(i);
}
}
return null;
}
public void add ( Object obj, Entry entry )
{
Entry newEntry = new Entry(obj, entry, entry.previous);
newEntry.next.previous = newEntry;
newEntry.previous.next = newEntry;
size++;
}
public void add ( Object obj )
{
add(obj, header);
}
public void add ( Object obj, int index )
{
add(obj, index == size ? header : get(index));
}
public Entry get ( int index )
{
if ( index < 0 || index >= size )
{
throw new RuntimeException("下标越界");
}
Entry entry = header;
if ( index > size >> 1 )
{
for ( int i = 0; i < size - index; i++ )
{
entry = entry.previous;
}
}
else
{
entry = entry.next;
for ( int i = 0; i < index; i++ )
{
entry = entry.next;
}
}
return entry;
}
public static void main ( String [] args )
{
MyLinkedList link = new MyLinkedList();
link.add("22222");
link.add("33333");
link.add("44444");
link.add("55555");
link.add("66666", 1);
for ( int i = 0; i < link.size(); i++ )
{
System.out.println( ( (Entry) link.get(i) ).obj);
}
System.out.println("....................");
// link.remove(1);
link.remove("33333") ;
for ( int i = 0; i < link.size(); i++ )
{
System.out.println( ( (Entry) link.get(i) ).obj);
}
}
}
0 0
- 简单实现 linkedList 双向链表
- 简单实现LinkedList(双向链表)
- [java数据结构]--java双向链表LinkedList的简单实现
- 利用双向链表实现LinkedList
- 双向链表(LinkedList) java实现
- LinkedList,双向链表的实现
- [数据结构]双向链表实现LinkedList
- LinkedList : 双向链表与实现
- 双向链表(LinkedList)
- LinkedList 双向链表
- JAVA实现简单的双向LinkedList
- LinkedList源码分析:双向循环链表实现
- Java-----Collection 实现的LinkedList(双向链表)
- 自己实现Java中基于双向链表的LinkedList
- linkedlist双向链表结构
- 双向链表简单实现
- Java LinkedList双向链表源码分析
- LinkedList之双向链表结构
- Struts2+uploadify动态向后台传参数
- git入门
- cocos2d-x学习之路——1
- C/C++连接MySql数据库
- html5 文件系统(四)
- 简单实现 linkedList 双向链表
- 图论:回路判断和拓扑排序(DFS)
- 让LINUX网卡开机自动启动
- 在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示
- R与JAVA的整合
- hadoop副本控制
- 自动填写验证码(内容提供者)
- dojo 加载器源文件讲解
- Wrong orientation? No orientation specified, and the default is horizontal, yet this layout has mult