import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
public class CircleLinkedList<T> extends LinkedList<T> implements Iterable<T> {
private static final long serialVersionUID = 1L;
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return new CircleIterator(this);
}
@Override
public ListIterator<T> listIterator() {
// TODO Auto-generated method stub
return new CircleListIterator(this);
}
@Override
public ListIterator<T> listIterator(int index) {
// TODO Auto-generated method stub
return new CircleListIterator(this, index);
}
private ListIterator<T> getListIterator(int index) {
return super.listIterator(index);
}
private ListIterator<T> getListIterator() {
return super.listIterator();
}
private Iterator<T> getIterator() {
return super.iterator();
}
class CircleListIterator implements ListIterator<T> {
CircleLinkedList<T> list;
ListIterator<T> iter;
public CircleListIterator(CircleLinkedList<T> list) {
// TODO Auto-generated constructor stub
this.list = list;
iter = list.getListIterator();
}
public CircleListIterator(CircleLinkedList<T> list, int index) {
// TODO Auto-generated constructor stub
this.list = list;
iter = list.getListIterator(index);
}
@Override
public void add(T e) {
iter.add(e);
}
@Override
public boolean hasNext() {
return list.size()>0;
}
@Override
public boolean hasPrevious() {
return list.size()>0;
}
@Override
public T next() {
if(iter.hasNext()){
return iter.next();
}else{
iter=list.getListIterator();
}
return iter.next();
}
@Override
public int nextIndex() {
int nextindex = iter.nextIndex() + list.size();
return nextindex % list.size();
}
@Override
public T previous() {
if(iter.hasPrevious()){
return iter.previous();
}else{
iter=list.getListIterator(list.size());
}
return iter.previous();
}
@Override
public int previousIndex() {
int previndex = iter.previousIndex() + list.size();
return previndex % list.size();
}
@Override
public void remove() {
iter.remove();
}
@Override
public void set(T e) {
iter.set(e);
}
}
class CircleIterator implements Iterator<T> {
Iterator<T> iter;
CircleLinkedList<T> list;
public CircleIterator(CircleLinkedList<T> list) {
this.list = list;
iter = list.getIterator();
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return list.size() > 0;
}
@Override
public T next() {
// TODO Auto-generated method stub
if (iter.hasNext()) {
return iter.next();
} else {
iter = list.getIterator();
return iter.next();
}
}
@Override
public void remove() {
// TODO Auto-generated method stub
iter.remove();
}
}
}
getFirst() 하면 head
getLast() 하면 tail
iterator 가져와서 next() 호출하면 무한히 돌아감 'ㅁ'
잘쓴다면 Josephus(조세푸스?) problem 도 풀수 잇게치?
진짜 푸는 알고리즘은 따로있지만 간단하게 구현할수 있다
긍데 테스트는 안해봤음
에러나도 난몰라
복사 하고 싶으면 맨윗줄에 마우스 올리면 오른쪽에 뭔가 나옴
근데 만들고 나니까 길다
'Programming > Java' 카테고리의 다른 글
| '필드'이지만 '메서드'처럼 사용됩니다. (2) | 2012.01.03 |
|---|---|
| "".equals ? (0) | 2011.12.21 |
| java에서 DES/AES 사용법 (0) | 2011.11.22 |
| java 7 의 달라진점 몇가지 (0) | 2011.09.26 |
| JAVA 로 System Information 알아내기 (0) | 2011.08.23 |