双向链表的增删改
双链表同单链表相比多了前驱节点,相比单链表插入删除更容易,可以随时调用当前节点的前节点,但同时增加了前驱节点,增删两项与单链表有点区别,修改遍历原来的单链表方法一样适用。
增加方法过程如下:
删除方法:
实现如下:
class DoubleNode {
// id和name是data域
private int id;
private String name;
public DoubleNode(int id, String name) {
this.id = id;
this.name = name;
}
public DoubleNode next;
public DoubleNode pre;
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class DoubleLinkedList {
public DoubleLinkedList() {
head = new DoubleNode(0, "");
}
public DoubleNode head;
public void addNode(DoubleNode node) {
DoubleNode temp = head;
while (null != temp.next) {
if (node.getId() == temp.next.getId()) {
System.out.println("编号已存在!");
return;
}
if (node.getId() < temp.next.getId()) {
break;
}
temp = temp.next;
}
if (null == temp.next) {
temp.next = node;
node.pre = temp;
System.out.println("编号成功添加!");
} else {
node.next = temp.next;
temp.next.pre = node;
temp.next = node;
node.pre = temp;
System.out.println("编号成功添加!");
}
}
public void deleteNode(DoubleNode node) {
DoubleNode temp = head.next;
boolean isFound = false;
while (null != temp) {
if (node.getId() == temp.getId()) {
isFound = true;
break;
}
temp = temp.next;
}
if (isFound) {
temp.pre.next = temp.next;
temp.next.pre = temp.pre;
System.out.println("编号已删除!");
} else {
System.out.println("编号不存在!");
}
}
public void updateNode(DoubleNode node) {
DoubleNode temp = head.next;
boolean isFound = false;
while (null != temp) {
if (node.getId() == temp.getId()) {
isFound = true;
break;
}
temp = temp.next;
}
if (isFound) {
temp.setName(node.getName());
System.out.println("修改成功!");
} else {
System.out.println("不存在该数据无法修改");
}
}
public void printList() {
DoubleNode temp = head.next;
while (null != temp) {
System.out.println("编号" + temp.getId() + "姓名" + temp.getName());
temp = temp.next;
}
}
}
public class DoubleLinkedListDemo {
public static void main(String[] args) {
DoubleLinkedList list = new DoubleLinkedList();
DoubleNode s1 = new DoubleNode(3, "003");
DoubleNode s2 = new DoubleNode(17, "017");
DoubleNode s3 = new DoubleNode(25, "025");
DoubleNode s4 = new DoubleNode(24, "024");
DoubleNode s5 = new DoubleNode(32, "032");
list.addNode(s3);
list.addNode(s1);
list.addNode(s4);
list.addNode(s2);
list.addNode(s5);
list.printList();
list.deleteNode(new DoubleNode(24, "024"));
list.printList();
}
}