3import java.util.NoSuchElementException;
46public class DList<T>
implements Iterable<T>,
55 data_=obj; prev_=prv; next_=nxt;
103 Node check(Node node) {
105 throw new IndexOutOfBoundsException();
114 return check(
head_).data_;
123 return check(
tail_).data_;
133 for (
int j=0;node!=
null && j<i;++j)
135 return check(node).data_;
144 if (
head_.next_!=
null)
156 if (
tail_.prev_!=
null)
166 void insert_after(Node node,T obj) {
170 else if (node==
tail_)
175 cur=
new Node(obj,prv,nxt);
187 insert_after((
Node)
null,obj);
190 for (
int j=0;j<i-1 && node!=
null;++j)
192 insert_after(check(node),obj);
226 for (
int j=0;j<i && node!=
null;++j)
230 if (node.prev_!=
null)
231 node.prev_.next_=node.next_;
235 if (node.next_!=
null)
236 node.next_.prev_=node.prev_;
259 public boolean hasNext() {
return node_!=
null; }
264 throw new NoSuchElementException();
273 throw new NoSuchElementException();
282 public void remove() {
283 throw new UnsupportedOperationException();
285 @Override @SuppressWarnings(
"unchecked")
297 @Override
public T
next() {
return super.previous(); }
298 @Override
public T
previous() {
return super.next(); }
353 insert_after(i.node_,
object);
358 insert_after(i.node_.prev_,
object);
370 rv+=node.data_.toString();
371 if (node.next_!=
null)
381 String rv=
"digraph DList {\n\t\n\tnode [shape=box];\n\t";
385 String prv=node.prev_!=
null ? node.prev_.data_.toString() :
"null";
386 String nxt=node.next_!=
null ? node.next_.data_.toString() :
"null";
388 rv+=
"\""+node.data_.toString()+
"\" -> \""+prv
389 +
"\" [color=blue,label=prev];\n\t"
390 +
"\""+node.data_.toString()+
"\" -> \""+nxt
391 +
"\" [color=blue,label=next];\n\t";
T previous()
return current entry and step backwards
T next()
return current entry and advance forward
Utility class to obtain a BackwardIterator.
BackwardIterator iterator()
get backward iterator for list_
boolean equals(Object other)
T previous()
return current entry and step backwards
T next()
return current entry and advance forward
boolean hasNext()
return true unless "advanced" over tail
Node(T obj, Node prv, Node nxt)
Implementation of a doubly linked list.
void clear()
Erase all entries.
void pop_front()
erase first entry (must exist) [O(1)]
void insert_after(ForwardIterator i, T object)
insert entry after iterator position
T back()
retrieve last entry (must exist) [O(1)]
int size()
determine number of entries [O(n)]
void erase(int i)
erase entry at position i [O(n)]
void push_front(T obj)
insert entry at front of list [O(1)]
void push_back(T obj)
append entry obj at end of list [O(1)]
T at(int i)
retrieve i-th entry [O(n)]
void pop_back()
erase last entry (must exist) [O(1)]
BackwardIterator reverse_iterator()
get backward iterator iterator
T front()
retrieve first entry (must exist) [O(1)]
Backwards backwards()
Get instance that provides a BackwardIterator.
ForwardIterator iterator()
get forward iterator
String toDot()
Get dot representation.
void insert(int i, T obj)
insert new entry obj at position i [O(n)]
boolean empty()
determine if list is empty [O(1)]
void insert_before(ForwardIterator i, T object)
insert entry before iterator position
Interface for GraphViz rendering.
utilities (not related to AuD lecture)
AuD lecture: Data structures, algorithms, examples.