目录
一:双向链表
二:双向链表代码展示
2.1 书类的定义
package pretext;
public class BookNode {
public int id;
public String name;
public int price;
public BookNode pre;
public BookNode next;
public BookNode(int id, int price, String name) {
this.id = id;
this.name = name;
this.price = price;
}
public String toString() {
return "编号:" + id + " 名称:" + name + " 价格" + price;
}
}
2.2 双向链表的构建
1. 删除比较特殊(需要考虑空指针异常具体代码如下)
2. 其他和单链表类似
package pretext;
public class DualLinkedList {
BookNode head = new BookNode(0,0,"");
//尾部追加
public void tailAdd(BookNode book) {
BookNode temp = head;
while(true) {
if(temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = book;
book.pre = temp;
}
//按编号追加
public void idAdd(BookNode book) {
BookNode temp = head;
boolean flag = false;
while(true) {
if(temp.next == null) {
break;
}
if(temp.next.id > book.id) {
break;
}else if(temp.next.id == book.id) {
flag = true;
break;
}
temp = temp.next;
}
if(flag) {
System.out.print("该书已存在");
}else {
book.next = temp.next;
temp.next.pre = book;
temp.next = book;
book.pre = temp;
}
}
//修改
public void update(BookNode book) {
if(head.next == null) {
System.out.print("空链表");
return;
}
BookNode temp = head.next;
boolean flag = false;
while(true) {
if(temp == null) {
break;
}
else if(temp.id == book.id) {
flag = true;
break;
}
temp = temp.next;
}
if(flag) {
temp.name = book.name;
temp.price = book.price;
}else {
System.out.print("未找到书");
}
}
//删除
public void delete(int id){
if(head.next == null) {
System.out.print("空链表");
return;
}
BookNode temp = head.next;
boolean flag = false;
while(true) {
if(temp == null) {
flag = true;
break;
}
if(temp.id == id) {
break;
}
temp = temp.next;
}
if(flag) {
System.out.print("未找到");
}else {
temp.pre.next = temp.next;
if(temp.next != null) {
temp.next.pre = temp.pre;
}else {
throw new RuntimeException("空指针异常");
}
}
}
//查看
public void list() {
if(head.next == null) {
System.out.print("空");
return;
}
BookNode temp = head.next;
while(true){
if(temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
}
}
}
查看的时候temp.next == null跳出循环;
2.3 书架
package pretext;
public class BookShop {
public static void main(String[] args) {
BookNode book1 = new BookNode(1,10,"红楼梦");
BookNode book2 = new BookNode(2,20,"水浒传");
BookNode book3 = new BookNode(3,30,"三国演义");
DualLinkedList list = new DualLinkedList();
list.tailAdd(book1);
list.tailAdd(book2);
list.tailAdd(book3);
// list.list();
list.delete(1);
// list.list();
list.update(new BookNode(2,10,"红楼梦"));
// list.list();
}
}