1.循环链表:首尾相连的链表。
2.单循环链表:在单链表中,如果最后一个结点的链域值不是NULL,而是指向头结点,则整个链就形成了一个环。
3.双向链表:链表的每一个结点中有2个指针域,一个指向直接后继,一个指向直接前驱。
4.双向循环链表:将双向链表中的头结点和尾结点链接起来。
5.判断双向循环链表为空的条件:头结点的前驱和后继指针均指向了自己。
6.算法
package com.bocloud.dulnode;
/**
* 双向循环链表
*
* @author dongkai
*
*/
public class DulNode {
char data;
DulNode next;
DulNode prior;
}
package com.bocloud.dulnode;
public class Test {
/**
* 插入算法(在结点P之前插入S)
*
* @param h
* @param i
* @param x
* @return
*/
int insert(DulNode h, int i, char x) {
DulNode p, s;
int j = 1;
p = h.next;
while (p != h && j < i) {
j++;
p = p.next;
}
if (j == i) {
s = new DulNode();
s.data = x;
s.prior = p.prior;
p.prior.next = s;
s.next = p;
p.prior = s;
return 1;
} else {
return 0;
}
}
/**
* 删除算法(删除第i个结点P)
*
* @param h
* @param i
* @return
*/
char dele(DulNode h, int i) {
char s;
DulNode p;
int j = 1;
p = h.next;
while (p != h && j < i) {
j++;
p = p.next;
}
if (j == i) {
s = p.data;
p.prior.next = p.next;
p.next.prior = p.prior;
p = null;
return s;
} else {
return 0;
}
}
}