数据结构之双向循坏链表java简单实现,java里面的基本数据结构已经很好用了,但是还是为了学习而学习,动手做一下总是踏实的。参考参考
public class doubleDirLinkList {
public static Node[] arr;
public static void main(String[] args) {
Node node = initList();//初始化双向循环链表
Node node5 = new Node();
Node node1 = new Node();
Node node2 = new Node();
Node node3 = new Node();
Node node4 = new Node();
arr = new Node[]{node, node1, node2, node3, node4, node5};//用数组模拟物理空间,存放结点
addElemLast(node, node1,"first");//插入节点
addElemLast(node1,node2,"second");
addElemLast(node2,node3,"third");
addElemLast(node3,node5,"five");
addElemLast(node3,node4,"four");
delElemLast(node3);//删除节点
showElem();//展示链表
}
public static Node initList(){
Node doubleList = new Node();
doubleList.setData("head node");
doubleList.setPre(doubleList);
doubleList.setNext(doubleList);
doubleList.setHeadNode(true);
return doubleList;
}
public static void addElemLast(Node node, Node node1,String nodeName){
node1.setData(nodeName);
node1.setNext(node.getNext());
node1.setPre(node);
node.getNext().setPre(node1);
node.setNext(node1);
}
public static void delElemLast(Node node){
node.getPre().setNext(node.getNext());
node.getNext().setPre(node.getPre());
for (int i=0; i<arr.length; i++){
if (arr[i].getData() == node.getData()){
arr[i]=null;
}
}
}
public static void showElem(){
for (int i=0; i<arr.length;i++){
if(arr[i] != null){
arr[i].showNode();
} else {
System.out.println("this is a blank item");
}
}
}
}
class Node <T>{
private T data;
private Node pre;
private Node next;
private boolean isHeadNode = false;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Node getPre() {
return pre;
}
public void setPre(Node pre) {
this.pre = pre;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public boolean isHeadNode() {
return isHeadNode;
}
public void setHeadNode(boolean headNode) {
isHeadNode = headNode;
}
public void showNode() {
if (this.isHeadNode == true){
System.out.println("{" +
"data=" + data +
", pre=" + pre.getData() +
", next=" + next.getData() +
", isHeadNode=" + isHeadNode +
'}');
} else {
System.out.println("{" +
"data=" + data +
", pre=" + pre.getData() +
", next=" + next.getData() +
'}');
}
}
}
输出示例: