Java知识点——Java链表的常见操作
参考:java 链表的常见操作
链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList
,其实现原理是数组。而LinkedList
的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。
1、 定义链表的节点类
class Node {
protected Node next; // 下一节点
protected String data;// 数据
public Node(String data) {
this.data = data;
}
// 显示此节点
public void show() {
System.out.print(data+"、");
}
}
2、定义链表类及其操作方法
class LinkList {
public Node first; // 定义头结点
private int pos = 0;// 节点的位置
public LinkList() {
this.first = null;
}
// 插入一个头节点
public void addFirstNode(String data) {
Node node = new Node(data);
node.next = first;
first = node;
}
// 删除一个头结点,并返回头结点
public Node deleteFirstNode() {
Node tempNode = first;
first = tempNode.next;
return tempNode;
}
// 在任意位置插入节点 在index的后面插入
public void add(int index, String data) {
Node node = new Node(data);
Node current = first;
Node previous = first;
while (pos != index) {
previous = current;
current = current.next;
pos++;
}
node.next = current;
previous.next = node;
pos = 0;
}
// 删除任意位置的节点
public Node deleteByPos(int index) {
Node current = first;
Node previous = first;
while (pos != index) {
pos++;
previous = current;
current = current.next;
}
if (current == first) {
first = first.next;
} else {
pos = 0;
previous.next = current.next;
}
return current;
}
// 根据节点的data删除节点(仅仅删除第一个)
public Node deleteByData(String data) {
Node current = first;
Node previous = first; // 记住上一个节点
while (current.data != data) {
if (current.next == null) {
return null;
}
previous = current;
current = current.next;
}
if (current == first) {
first = first.next;
} else {
previous.next = current.next;
}
return current;
}
// 显示出所有的节点信息
public void displayAllNodes() {
Node current = first;
while (current != null) {
current.show();
current = current.next;
}
System.out.println();
}
// 根据位置查找节点信息
public Node findByPos(int index) {
Node current = first;
if (pos != index) {
current = current.next;
pos++;
}
return current;
}
// 根据数据查找节点信息
public Node findByData(String data) {
Node current = first;
while (current.data != data) {
if (current.next == null)
return null;
current = current.next;
}
return current;
}
}
3、例子:
public class Client {
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.addFirstNode("A");
linkList.addFirstNode("B");
linkList.addFirstNode("C");
linkList.add(1, "D");
linkList.add(2, "E");
linkList.add(3, "F");
linkList.displayAllNodes();
Node node = linkList.deleteByData("A");
System.out.println("node : " + node.data);
linkList.displayAllNodes();
Node node1 = linkList.findByPos(0);
System.out.println("node1: " + node1.data);
Node node2 = linkList.findByData("E");
System.out.println("node2: " + node2.data);
}
}
4、结果
C、D、E、F、B、A、
node : A
C、D、E、F、B、
node: C
node: E