文档库 最新最全的文档下载
当前位置:文档库 › 链表(link)

链表(link)

链表分为单链和双链,单链只有向下next,双链只是在单链表的上多加了一个前趋的属性prior,用来得到它的上一个链接,
概念:链表由节点组成,每一个节点的结构都相同节点分为数据域和链域,数据域是存放节点的内容,链域存放的是下一个节点的指针.
与数组相比的优点:大小可变效率高。
常用操作:初始化、求表长、读链表节点、定位、插入、删除

------节点类
public class Node {
Object object;//数据域
Node next;//链接域,自引用”式,它包含了一个和自己类型相同的字段next。
Node prior;
}
------链表类
插入:找到新节点要插的位置的节点,将新节点于这个节点连接,再将新的节点与这个节点的上一个节点连接.
删除:把这个节点的下一节点,接到这个节点的上一节点
注意:这里头结点是空着的
public class Nlist {
Node head;
public Nlist(){
head=new Node();//初始化得到一个空表,称“头节点”
}
public void add(Person object){ //添加节点
Node n=new Node(object);
Node a=head.getNext();
if(a==null){ //如果是第一个节点
head.setNext(n);
}else{
while(a.getNext()!=null){
a=a.getNext();

}
a.setNext(n);
n.setPrior(a);
}
}
public void insert(Object object,int i){//插入节点
Node l=find(i);//下一个
Node q=l.getPrior();//上一个
Node n=new Node(object);//生一个新节点
n.setNext(l);
l.setPrior(n);
n.setPrior(q);
q.setNext(n);
}
public void remove(int i){ //删除节点
Node n=find(i);//要删除的节点
n.prior.setNext(n.getNext());
n.getNext().setPrior(n.getPrior());
}
public Node find(int i){ //定位
if(i<0)return head;
i++;
Node n=head;
int cont=0;
while(n.getNext()!=null){
if(cont==i)break;
cont++;
n=n.getNext();
}
return n;
}
}

----------------------------------



相关文档
相关文档 最新文档