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);
}
}
}