001 | import java.util.Iterator; |
002 | import java.util.LinkedList; |
003 | import java.util.ListIterator; |
004 |
005 | public 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 |