一.实现思路
(1) 添加功能
1) 添加到末尾
cur.next = newNode
newNode.pre = cur
2) 添加到中间
cur.pre.next = node
node.pre = cur.pre
node.next = cur
cur.pre = node
(2) 删除功能
cur.pre.next = cur.next
if(cur.next != null){//可能是最后一个节点,会报空指针异常
cur.next.pre = cur.pre
}
二.代码实现
class DoubleLinkedList{
private Node1 head = null;
public Node1 getHead() {
return head;
}
public DoubleLinkedList() {
head = new Node1(0, null);
}
//升序添加
public void add2(Node1 node) {
Node1 cur = head;
boolean flag1 = false;
boolean flag2 = false;
while (true) {
if (cur.id > node.id) {
break;
} else if (cur.id == node.id) {
flag2 = true;
break;
}
if(cur.next == null){
flag1 = true;
break;
}
cur = cur.next;
}
if (flag2) {
System.out.println("id为:" + node.id + "的节点已经存在了");
}else if(flag1){
cur.next = node;
node.pre = cur;
}else {
cur.pre.next= node;
node.pre = cur.pre;
node.next = cur;
cur.pre = node;
}
}
public void update(Node1 node) {
if (head.next == null) {
System.out.println("链表为空");
return;
}
Node1 cur = head.next;
while (cur != null) {
if (cur.id == node.id) {
cur.name = node.name;
break;
}
cur = cur.next;
}
}
//正向打印链表
public void print() {
if (head.next == null) {
System.out.println("链表为空");
return;
}
Node1 cur = head.next;
while (cur != null) {
System.out.println(cur.toString());
cur = cur.next;
}
}
//指定删除一个节点
public void remove2(int id) {
if (head.next == null) {
System.out.println("链表为空");
return;
}
Node1 cur = head.next;
boolean flag = false;
while (cur != null) {
if (cur.id == id) {
flag = true;
break;
}
cur = cur.next;
}
if (flag) {
cur.pre.next = cur.next;
if(cur.next != null){//最后一个节点的next节点为空,会报空指针
cur.next.pre = cur.pre;
}
} else {
System.out.println("没有找id为" + id + "的节点");
}
}
}
class Node1 {
int id;
String name;
Node1 next;
Node1 pre;
public Node1(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Node1{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}