实现思路:
代码:
public class DoubleLinkedList {
private Person head = new Person(0,"");
// 获取头结点
public Person getHead(){
return head;
}
// 添加-- 直接添加,没有按顺序添加
public void add(Person headNode,Person node){
if(headNode.next == null){// 只有头结点的时候
headNode.next = node;
node.pre = headNode;
return;
}
Person temp = headNode;
while(true){// 寻找最后一个节点
if(temp.next == null){// 最后一个节点
temp.next = node;
node.pre = temp;
break;
}
temp = temp.next;
}
}
// 按顺序添加节点
public void addByOrder(Person headNode,Person node){
/**
* 1.链表为空的第一个节点插入
* 2.在中间插入
* 3.在尾部插入
*/
boolean flag = true;
Person temp = headNode.next;
while(true){
if(temp == null){// 首节点插入
headNode.next = node;
node.pre = headNode;
flag = false;
break;
}
if(node.id < temp.id){// 中间插入
temp.pre.next = node;
node.pre = temp.pre;
node.next = temp;
temp.pre =node;
flag = false;
break;
}
if(node.id == temp.id){ // 已经存在
System.out.println("节点已存在。。");
flag = false;
break;
}
if(temp.next == null){// 如果已经没有节点了,就退出
break;
}
temp = temp.next;
}
if(flag){// 尾部插入的节点
temp.next = node;
node.pre = temp;
}
}
// 修改
public void update(Person updateNode){
boolean flag = true;
Person temp = head.next;
while(true){
if(head.next == null){
throw new RuntimeException("链表为空。。。");
}
if(temp.id == updateNode.id){
// System.out.println(updateNode);
temp.name = updateNode.name;
flag = false;
break;
}
temp = temp.next;
}
if(flag){
System.out.println("该节点不存在。。");
}
}
// 删除
public void delete(int id){
boolean flag = true;
Person temp = head.next;
if(head.next == null){
throw new RuntimeException("链表为空。。");
}
while(temp != null){
if(temp.id == id){
if(temp.next == null){// 如果删除的是最后一个的话
temp.pre.next = null;
temp.pre = null;
flag = false;
break;
}else{
temp.pre.next = temp.next;
temp.pre = temp.next.pre;
flag = false;
break;
}
}
temp = temp.next;
}
if(flag){
throw new RuntimeException("链表的该节点不存在。。。");
}
}
// 显示
public void show(Person headNode){
if(headNode.next == null){
throw new RuntimeException("运行时异常。。");
}
Person temp = headNode.next;
while( temp != null){
System.out.println(temp);
temp = temp.next;
}
}
}
节点
public class Person {
public int id;
public String name;
public Person next;
public Person pre;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
测试
public class TestMain {
public static void main(String[] args) {
Person person1 = new Person(1,"zs");
Person person3 = new Person(6,"ww");
Person person2 = new Person(3,"ls");
DoubleLinkedList linkedList = new DoubleLinkedList();
linkedList.addByOrder(linkedList.getHead(),person1);
linkedList.addByOrder(linkedList.getHead(),person3);
linkedList.addByOrder(linkedList.getHead(),person2);
System.out.println("添加以后。。。。");
linkedList.show(linkedList.getHead());
System.out.println("修改以后。。。。");
Person person4 = new Person(3,"zss");
linkedList.update(person4);
linkedList.show(linkedList.getHead());
//
System.out.println("删除以后。。。。");
linkedList.delete(3);
linkedList.show(linkedList.getHead());
}
}