简单实现 linkedList 双向链表
2014-02-28 16:19
423 查看
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();
927b
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();
927b
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);
}
}
}
相关文章推荐
- [java数据结构]--java双向链表LinkedList的简单实现
- C语言实现双向链表(DoublyLinkedList)
- LinkedList : 双向链表与实现
- C#双向链表LinkedList排序实现方法
- Data structure-4 双向链表 DoubleLinkedList--Java语言实现
- LinkedList,双向链表的实现
- LinkedList链表实现队列应用的简单实例
- Python数据结构与算法之列表(链表,linked list)简单实现
- 容器第四课,JDK源代码分析,自己实现LinkedList,双向链表的概念_节点定义
- 双向链表的C++实现 Implement of Doubly Linked List
- 自己实现单向链表讨论一下LinkedList的效率
- C语言实现单链表(LinkedList)
- LinkedList 双向链表
- Java 集合的简单实现 (ArrayList & LinkedList & Queue & Stack)
- 简单实现MyLinkedList
- 简单数据结构之双向链表(C++实现)
- Circular Doubly Linked List 双向循环链表 C++ 例子
- 使用C++实现双向链表List
- 简单易懂的C语言实现双向链表代码
- 双向链表的简单实现