import java.util.Iterator;
import java.util.NoSuchElementException;
public class LinkedList1<T> {
private Entry<T> header = new Entry<T>(null,null,null);
private int size = 0;
LinkedList1()
{
header.next = header.previous = header ;
};
void push(T e)
{
addBefore(e,header.next);
}
private void addBefore(T e, Entry<T> entry)
{
Entry<T> newEntry = new Entry<T>(e,entry,entry.previous);
newEntry.next.previous = newEntry;
newEntry.previous.next = newEntry;
size++;
}
private static class Entry<T>
{
T element;
Entry<T> next;
Entry<T> previous;
Entry(T element ,Entry<T> next, Entry<T> previous)
{
this.element = element;
this.next = next;
this.previous = previous;
}
}
public Iterator<T> getIterator()
{
return new IteratorList();
}
private class IteratorList implements Iterator<T>
{
private Entry<T> lastReturn = header;
int cursor = 0;
@Override
public boolean hasNext()
{
return cursor < size;
}
@Override
public T next()
{
try
{
lastReturn = lastReturn.next;
cursor++;
return lastReturn.element;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new NoSuchElementException();
}
}
@Override
public void remove()
{
Entry<T> e = lastReturn.previous;
LinkedList1.this.remove(lastReturn);
lastReturn = e;
}
}
public T get(int index)
{
if(index >= size)
{
throw new NoSuchElementException();
}
Entry<T> 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.element;
}
public int getSize()
{
return size;
}
public T remove(Entry<T> e)
{
if(e == header)
{
throw new NoSuchElementException();
}
T result = e .element;
e.next.previous = e.previous;
e.previous.next = e.next;
e.previous = e.next = null;
e.element = null;
size -- ;
return result;
}
public Object[] toArray()
{
Object[] a = new Object[size];
Entry<T> e = header;
for (int i = 0;i < size;i++)
{
e = e.next;
a[i] = e.element;
}
return a;
}
}
import java.util.NoSuchElementException;
public class LinkedList1<T> {
private Entry<T> header = new Entry<T>(null,null,null);
private int size = 0;
LinkedList1()
{
header.next = header.previous = header ;
};
void push(T e)
{
addBefore(e,header.next);
}
private void addBefore(T e, Entry<T> entry)
{
Entry<T> newEntry = new Entry<T>(e,entry,entry.previous);
newEntry.next.previous = newEntry;
newEntry.previous.next = newEntry;
size++;
}
private static class Entry<T>
{
T element;
Entry<T> next;
Entry<T> previous;
Entry(T element ,Entry<T> next, Entry<T> previous)
{
this.element = element;
this.next = next;
this.previous = previous;
}
}
public Iterator<T> getIterator()
{
return new IteratorList();
}
private class IteratorList implements Iterator<T>
{
private Entry<T> lastReturn = header;
int cursor = 0;
@Override
public boolean hasNext()
{
return cursor < size;
}
@Override
public T next()
{
try
{
lastReturn = lastReturn.next;
cursor++;
return lastReturn.element;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new NoSuchElementException();
}
}
@Override
public void remove()
{
Entry<T> e = lastReturn.previous;
LinkedList1.this.remove(lastReturn);
lastReturn = e;
}
}
public T get(int index)
{
if(index >= size)
{
throw new NoSuchElementException();
}
Entry<T> 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.element;
}
public int getSize()
{
return size;
}
public T remove(Entry<T> e)
{
if(e == header)
{
throw new NoSuchElementException();
}
T result = e .element;
e.next.previous = e.previous;
e.previous.next = e.next;
e.previous = e.next = null;
e.element = null;
size -- ;
return result;
}
public Object[] toArray()
{
Object[] a = new Object[size];
Entry<T> e = header;
for (int i = 0;i < size;i++)
{
e = e.next;
a[i] = e.element;
}
return a;
}
}