Java 实现自定义链表
节点类 Node.java
public class Node {
/** 当前节点的数据*/
private String data;
/** 如果当前节点是首/尾节点 NULL 或者是 下一个节点的实例*/
private Node next;
public Node(final String data) {
this.data = data;
}
public void setNext(final Node next) {
this.next = next;
}
public Node getNext() {
return this.next;
}
public String getData() {
return this.data;
}
public void addNode(final Node newNode) {
if (this.next == null) {
this.next = newNode;
} else {
this.next.addNode(newNode);
}
}
public void printNode() {
System.out.println(this.data);
if (this.next != null) {
this.next.printNode();
}
}
public boolean containNode(final String data) {
/** 比对当前节点数据是否相同*/
if (this.data.equals(data)) {
return true;
} else {
if (this.next != null) {
return this.next.containNode(data);
} else {
return false;
}
}
}
public void removeNode(final Node previous, final String data) {
/** 比对当前节点数据是否和将要删除的数据相同*/
if (this.data.equals(data)) {
/** 数据相同的前提下 把下一个节点覆盖到上一个节点的 next*/
previous.next = this.next;
} else {
this.next.removeNode(this, data);
}
}
}
操作功能类 Link.java
public class Link {
private Node root;
public void add(final String data) {
if (data == null || this.contains(data)) {
return;
}
Node newNode = new Node(data);
if (this.root == null) {
this.root = newNode;
} else {
this.root.addNode(newNode);
}
}
public void print() {
if (this.root != null) {
this.root.printNode();
}
}
public boolean contains(final String data) {
if (data == null || this.root == null) {
return false;
}
return this.root.containNode(data);
}
public void remove(final String data) {
/** 1. 首先判断是否有相同数据节点*/
if (this.contains(data)) {
/** 2. 将要删除的数据和当前根节点数据节点相同的话 把下一个节点覆盖到根节点*/
if (this.root.getData().equals(data)) {
this.root = this.root.getNext();
} else {
/** 通过当前根节点和将要删除的数据, 删除节点*/
this.root.getNext().removeNode(this.root , data);
}
}
}
}
App.java
public class App {
public static void main(String[] args) {
final Link list = new Link();
list.add("馒头");
list.add("豆浆");
list.add("茶叶蛋");
list.add("包子");
list.add("麻花");
list.add("豆浆");
/** 删除*/
list.remove("包子");
list.remove("豆浆");
/** 打印*/
list.print();
/** 查询*/
System.out.println(list.contains("馒头"));
System.out.println(list.contains("豆浆"));
}
}
结果:
> 馒头
> 茶叶蛋
> 麻花
> true
> false
如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!