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 |