package com.structure.linkedList;
/*
双向链表
*/
public class DubboLinkedListDemo {
public static void main(String[] args) {
DubboLinkedNode node1 = new DubboLinkedNode(1,"节点1");
DubboLinkedNode node2 = new DubboLinkedNode(2,"节点2");
DubboLinkedNode node3 = new DubboLinkedNode(3,"节点3");
DubboLinkedNode node4 = new DubboLinkedNode(4,"节点4");
DubboLinkedList list = new DubboLinkedList();
list.add(node1);
list.add(node2);
list.add(node3);
list.add(node4);
list.showDubboLinked();
DubboLinkedNode node5 = new DubboLinkedNode(4,"修改节点4");
DubboLinkedNode node41 = list.update(node5);
System.out.println("修改后的节点"+node41);
list.showDubboLinked();
System.out.println("删除后的链表:");
list.delete(4);
list.showDubboLinked();
}
}
class DubboLinkedList{
//定义头节点
DubboLinkedNode headNode = new DubboLinkedNode(0,"头节点");
//向尾部添加双向节点
//思路:跟单向链表一样,定义一个临时节点存放
public void add(DubboLinkedNode node){
DubboLinkedNode temp = headNode;
while (true){
if(temp.nextNode==null){
temp.nextNode = node;
node.preNode = temp;
break;
}
temp = temp.nextNode;
}
}
//更新节点
//思路:循环遍历找到当前需要修改的节点
public DubboLinkedNode update(DubboLinkedNode node){
DubboLinkedNode temp = headNode;
if(headNode.nextNode==null){
return null;
}
while (true){
if(temp.nextNode==null){
return null;
}
if(temp.nextNode.no==node.no){
temp.nextNode.name=node.name;
break;
}
temp = temp.nextNode;
}
return temp.nextNode;
}
//删除节点
//思路:1、先循环遍历找到需要删除的节点
// 2、当前删除节点前一个节点指向当前删除节点的下个节点
// 3、当前节点的下一个节点的前一个指针指向当前删除节点的前一个节点
public void delete(int no){
DubboLinkedNode temp = headNode.nextNode;
if (headNode==null){
System.out.println("链表为空,无法删除");
}
while (true){
if (temp==null){
System.out.println("没有找到当前删除节点");
break;
}
if(temp.no==no){
temp.preNode.nextNode = temp.nextNode;
if (temp.nextNode!=null) {
temp.nextNode.preNode = temp.preNode;
}
break;
}
temp = temp.nextNode;
}
}
//显示链表
public void showDubboLinked(){
DubboLinkedNode temp = headNode.nextNode;
if(headNode.nextNode==null){
System.out.println("链表为空");
return;
}
while (temp!=null){
System.out.println(temp);
temp = temp.nextNode;
}
}
}
class DubboLinkedNode{
public int no;
public String name;
public DubboLinkedNode preNode;
public DubboLinkedNode nextNode;
public DubboLinkedNode(int no,String name){
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "DubboLinkedNode{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
}
双向链表简单代码实现
最新推荐文章于 2023-06-20 22:03:45 发布