001import java.util.Iterator;
002import java.util.LinkedList;
003import java.util.ListIterator;
004 
005public class CircleLinkedList<T> extends LinkedList<T> implements Iterable<T> {
006 
007    private static final long serialVersionUID = 1L;
008 
009    @Override
010    public Iterator<T> iterator() {
011        // TODO Auto-generated method stub
012        return new CircleIterator(this);
013    }
014 
015    @Override
016    public ListIterator<T> listIterator() {
017        // TODO Auto-generated method stub
018        return new CircleListIterator(this);
019    }
020 
021    @Override
022    public ListIterator<T> listIterator(int index) {
023        // TODO Auto-generated method stub
024        return new CircleListIterator(this, index);
025    }
026 
027    private ListIterator<T> getListIterator(int index) {
028        return super.listIterator(index);
029    }
030 
031    private ListIterator<T> getListIterator() {
032        return super.listIterator();
033    }
034 
035    private Iterator<T> getIterator() {
036        return super.iterator();
037    }
038 
039    class CircleListIterator implements ListIterator<T> {
040        CircleLinkedList<T> list;
041        ListIterator<T> iter;
042 
043        public CircleListIterator(CircleLinkedList<T> list) {
044            // TODO Auto-generated constructor stub
045            this.list = list;
046            iter = list.getListIterator();
047        }
048 
049        public CircleListIterator(CircleLinkedList<T> list, int index) {
050            // TODO Auto-generated constructor stub
051            this.list = list;
052            iter = list.getListIterator(index);
053        }
054 
055        @Override
056        public void add(T e) {
057            iter.add(e);
058        }
059 
060        @Override
061        public boolean hasNext() {
062            return list.size()>0;
063        }
064 
065        @Override
066        public boolean hasPrevious() {
067            return list.size()>0;
068        }
069 
070        @Override
071        public T next() {
072            if(iter.hasNext()){
073                return iter.next();
074            }else{
075                iter=list.getListIterator();
076            }
077            return iter.next();
078        }
079 
080        @Override
081        public int nextIndex() {
082            int nextindex = iter.nextIndex() + list.size();
083            return nextindex % list.size();
084        }
085 
086        @Override
087        public T previous() {
088            if(iter.hasPrevious()){
089                return iter.previous();
090            }else{
091                iter=list.getListIterator(list.size());
092            }
093            return iter.previous();
094        }
095 
096        @Override
097        public int previousIndex() {
098            int previndex = iter.previousIndex() + list.size();
099            return previndex % list.size();
100        }
101 
102        @Override
103        public void remove() {
104            iter.remove();
105 
106        }
107 
108        @Override
109        public void set(T e) {
110            iter.set(e);
111        }
112 
113    }
114 
115    class CircleIterator implements Iterator<T> {
116        Iterator<T> iter;
117        CircleLinkedList<T> list;
118 
119        public CircleIterator(CircleLinkedList<T> list) {
120            this.list = list;
121            iter = list.getIterator();
122        }
123 
124        @Override
125        public boolean hasNext() {
126            // TODO Auto-generated method stub
127            return list.size() > 0;
128        }
129 
130        @Override
131        public T next() {
132            // TODO Auto-generated method stub
133            if (iter.hasNext()) {
134                return iter.next();
135            } else {
136                iter = list.getIterator();
137                return iter.next();
138            }
139 
140        }
141 
142        @Override
143        public void remove() {
144            // TODO Auto-generated method stub
145            iter.remove();
146 
147        }
148    }
149}
150    

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
Posted by 동적할당
: