代码如下:
package com.example.demo.test02;
import lombok.Data;
public class Test02 {
public static void main(String[] args) {
LinkedNode node1 = new LinkedNode(1, "位置1");
LinkedNode node2 = new LinkedNode(2, "位置2");
LinkedNode node3 = new LinkedNode(3, "位置3");
LinkedNode node4 = new LinkedNode(4, "位置4");
DoubleLinked doubleLinked =new DoubleLinked();
System.out.println("修改前的链表");
doubleLinked.add01(node1);
doubleLinked.add01(node3);
doubleLinked.add01(node2);
doubleLinked.add01(node4);
doubleLinked.showAll();
LinkedNode node5 = new LinkedNode(1, "位置5");
doubleLinked.update(node5);
System.out.println("修改后的链表");
doubleLinked.showAll();
doubleLinked.delete(1);
System.out.println("删除后的链表");
doubleLinked.showAll();
}
}
/**
* 定义一个单链表
*/
class DoubleLinked {
/**
* 初始化LinkedNode
*/
private LinkedNode head = new LinkedNode(0, "头节点");
/**
* 遍历所有的节点
*/
public void showAll() {
if (head.next == null) {
System.out.println("链表为空");
return;
}
LinkedNode temp = head.next;
while (true) {
if (temp == null) {
return;
}
System.out.println(temp.address);
temp = temp.next;
}
}
/**
* 第一种添加方法:只能根据添加的数据顺序进行排序
* 添加节点
*/
public void add01(LinkedNode linkedNode) {
LinkedNode temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = linkedNode;
linkedNode.pre = temp;
}
/**
* 修改节点
*/
public void update(LinkedNode newNode) {
if (head.next == null) {
System.out.println("链表为空");
return;
}
LinkedNode temp = head.next;
boolean flag = true;
while (true) {
if (temp == null) {
break;
}
if (temp.no == newNode.no) {
temp.setAddress(newNode.getAddress());
return;
}
temp = temp.next;
}
if (false) {
System.out.println("链表中没有该数据");
}
}
/**
* 删除节点
*/
public void delete(int n) {
if (head.next == null) {
System.out.println("链表为空");
return;
}
LinkedNode temp = head.next;
boolean flag = false;
while (true) {
if (temp.no == n) {
flag = true;
break;
}
if (temp == null) {
break;
}
temp = temp.next;
}
if (flag) {
System.out.println("删除节点成功");
if (temp.next == null) {
temp.pre.next = null;
return;
} else {
temp.pre.next = temp.next;
temp.next.pre = temp.pre;
}
}
System.out.println("没有该节点");
}
}
@Data
class LinkedNode {
/**
* 位置
*/
public int no;
/**
* 名称
*/
public String address;
/**
* 指向下一个节点
*/
public LinkedNode next;
/**
* 指向上一个节点
*/
public LinkedNode pre;
public LinkedNode(int no, String address) {
this.no = no;
this.address = address;
}
@Override
public String toString() {
return "LinkedNode{" +
"no=" + no +
", address='" + address + '\'' +
'}';
}
}