双向链表:
在单链表中,每个节点所含的链域指向后继节点,故从任一节点后继很方便,但要找到
前驱及节点比较困难。
public class DNode {
String name;
DNode next,prev;
public DNode() {
}
public DNode(String name) {
this(name,null,null);
}
public DNode(String name,DNode next,DNode prev) {
this.name=name;
this.next=next;
this.prev=prev;
}
package Data.Structer;
public class DobuleLink {
//创建一个链表
DNode head;
public DobuleLink() {
head=new DNode();
head.next=null;
head.prev=null;
}
//增加一个
public void addDlink(String name) {
DNode p=head;
while(p.next!=null) {
p=p.next;
}
DNode temp=new DNode(name);
p.next=temp;
temp.prev=p;
}
//删除操作
public void deleteNode(String data) {
/**
* 1.获取表头
* 2.通过表头找到最后一个元素
* 3.把最后一个元素删除
*/
DNode p=head;
//空链表直接返回
if(p.next==null) {
}
while(p.next!=null) {
if(p.next.name.equals(data)) {
//顺序不能换
p.next.next.prev=p.next.prev;
p.next=p.next.next;
break;
}
else {
p=p.next;
}
}
}
//遍历
public void display() {
DNode p=head;
//从头到尾
System.out.println("从头到尾");
while(p.next!=null) {
System.out.println("->>"+p.next.name);
p=p.next;
}
System.out.println("从未到头");
//从未到头
while(p!=head) {
System.out.println("->>"+p.name);
p=p.prev;
}
}
//查找
public void findNode(String data) {
/**
* 1.获取表头
* 2.通过表头找到该元素元素
* 3.把最后一个元素删除
*/
DNode p=head;
//空链表直接返回
if(p.next==null) {
}
while(p.next!=null) {
if(p.next.name.equals(data)) {
System.out.println("data"+p.next.name);
break;
}
else {
p=p.next;
}
}
}
//插入节点
public void insertNode(String param,String data) {
/*
* param表示新增的节点要插入到节点的后面
* 获取表头
* 通过表头找到param元素的节点
* 把新增的节点插入到该节点后面
*/
DNode p=head;
while(p.next!=null) {
if(p.next.name.equals(param)) {
if(p.next.next==null) {
DNode temp=p.next;
DNode innser=new DNode(data);
innser.next=temp.next;
temp.next=innser;
innser.prev=temp;
break;
}
else {
DNode temp=p.next;
DNode dtemp=p.next.next;
DNode innser=new DNode(data);
dtemp.prev=innser;
innser.prev=temp;
innser.next=temp.next;
temp.next=innser;
break;
}
}else {
p=p.next;
}
}
}
//计算列表大小
public int size() {
DNode p=head;
int n=0;
while(p.next!=null) {
p=p.next;
n++;
}
return n;
}
public static void main(String[] args) {
DobuleLink link=new DobuleLink();
link.addDlink("组长");
link.addDlink("部门经理");
link.addDlink("主管副总");
link.addDlink("总经理");
// link.display();
// System.out.println(link.size());
// link.deleteNode("部门经理");
// link.display();
// System.out.println(link.size());
// link.insertNode("组长","部门经理");
// link.display();
// System.out.println(link.size());
System.out.println("=================");
link.insertNode("总经理","董事长");
link.display();
System.out.println(link.size());
}
}