}
@Override
public int indexOf(Object e) {
Node p = head.next;
int i = 0;
while(!p.data.equals(e)) {
p = p.next;
i++;
}
if(i
return i;
else
return -1;
}
@Override
public void insert(int i, Object e) {
Node p = index(i);
Node p2 = new Node(e);
p2.next = p.next;
p.next = p2;
size ++;
}
@Override
public boolean isEmpty() {
if(size ==0)
return true;
else
return false;
}
@Override
public int lastIndexOf(Object e) {
int i = size-1;
while(!get(i).equals(e)) {
i--;
}
if(i>=0)
return i;
else
return -1;
}
@Override
public void remove(int i) {
if(i>=0 && i
Node p = null;
if(i == 0)
p = head;
else {
p = index(i-1);
}
p.next = index(i).next;
}
size --;
}
@Override
public void set(int i, Object e) {
Node p = index(i);
p.data = e;
}
@Override
public int size() {
return size;
}
}
双向循环链表
结构模型
带头结点的双循环链结构
(a)空链; (b)非空链
源代码
[java]
package list;
/**
* 链表的结点
* @author luoweifu
*
*/
class DlNode{
Object data;
DlNode prior, next;
public DlNode() {
this(null);
}
public DlNode(Object data) {
this.data = data; //数据元素
this.prior = null; //前驱结点
this.next = null; //后驱结点
}
}
/**
* 带头结点的双向循环链表,下标从0开始;
* @author Administrator
*
*/
public class DoubleLinkList implements List {
DlNode head; //头结点
int size; //链表的大小
public DoubleLinkList() {
head = new DlNode();
head.prior = head;
head.next = head;
size = 0;
}
public DoubleLinkList(Object[] datas) {
int n = datas.length;
head = new DlNode();
DlNode p = head;
DlNode p2 = null;
for(int i=0; i
p2 = new DlNode(datas[i]);
p.next = p2;
p2.prior = p;
p = p.next;
}
p2.next = head;
head.prior = p2;
size = n;
}
@Override
public void add(Object e) {
DlNode p, p2;
if(0 == size) {
p = head;
} else {
p = index(size-1);
}
p2 = new DlNode(e);
p.next = p2;
p2.prior = p;
p2.next = head;
head.prior = p2;
size ++;
}
@Override
public void clear() {
head.prior = head;
head.next = head;
size = 0;
}
@Override
public Object get(int i) {
DlNode p = index(i);
return p.data;
}
private DlNode index(int i) {
DlNode p = null;