双向链表应用场景
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
1.创建双链表结点
BookNode
package linked;
//双链表的图书结点
public class BookNode {
public int id;
public String name;
public double price;
public BookNode pre;
public BookNode next;
public BookNode(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "BookNode{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}
2.创建双链表类,编写增删改查方法。
TwoLinkedList
package linked;
//双向链表
public class TwoLinkedList {
private BookNode head=new BookNode(0,"",0.0);
//在双向链表结尾添加新结点
public void addLast(BookNode bookNode){
BookNode temp=head;
while (true){
if (temp.next==null){
break;
}
temp=temp.next;
}
//需要把新的结点给上一个结点,需要把上一个结点的next指向新的结点
temp.next=bookNode;
bookNode.pre=temp;
}
/**
* 修改结点:
* 条件:双向链表中每一个结点的id和修改的id对比
* 如果对比成功,则进行修改该结点,
* 如果没有对比成功,则双向链表中未找到目标结点
*/
public void updateNode(BookNode node){
if (head.next==null){
System.out.println("空链表!");
return;
}
BookNode temp=head.next;
boolean flg=false;
while (true){
if (temp==null){
break;
}
if (temp.id==node.id){
flg=true;
break;
}
temp=temp.next;
}
if (flg){
temp.name=node.name;
temp.price=node.price;
}else {
System.out.println("为找到要修改的结点!");
}
}
/**
* 双向链表的删除
*/
public void deleteNode(int id){
if (head.next==null){
System.out.println("空链表!");
return;
}
BookNode temp=head.next;
boolean flg=true;
while (true){
if (temp==null) {
break;
}
if (temp.id==id){
flg=true;
break;
}
temp=temp.next;
}
if (flg){
temp.pre.next=temp.next;
if(temp.next!=null){
temp.next.pre=temp.pre;
}
}else {
System.out.println("未找到该结点!");
}
}
}
3.创建测试类
TwoLinkedList
package linked;
//双向链表的测试
public class TwoLinkedListTest {
public static void main(String[] args) {
TwoLinkedList twoLinkedList=new TwoLinkedList();
BookNode bookNode1=new BookNode(1,"西游记",16.90);
BookNode bookNode2=new BookNode(2,"三国演义",19.90);
BookNode bookNode3=new BookNode(3,"水浒传",26.90);
BookNode bookNode4=new BookNode(4,"红楼梦",19.99);
twoLinkedList.addLast(bookNode1);
twoLinkedList.addLast(bookNode2);
twoLinkedList.addLast(bookNode3);
twoLinkedList.addLast(bookNode4);
// twoLinkedList.deleteNode(2);
twoLinkedList.updateNode(new BookNode(3,"数据结构与算法",66.66));
System.out.println("");
}
}
功能测试:
添加功能
删除
修改