Java函数实现链表的增删改查
链表是一种数据结构,由一系列节点(Node)组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表是一种动态数据结构,可以动态添加节点,不需要预先分配空间大小。链表的节点可以按照顺序访问,也可以根据索引访问。
Java中链表的实现方式比较多,常见的有单向链表和双向链表两种。在本文中,我们主要介绍单向链表的实现方式,并在此基础上实现链表的增删改查操作。
单向链表的节点类实现
首先,我们需要定义一个节点的类,包含两个属性:data(数据元素)和next(指向下一个节点的指针)。
public class Node {
public int data; // 数据部分
public Node next; // 指向下一个节点的指针
public Node(int data) {
this.data = data;
this.next = null;
}
}
单向链表的实现方式
单向链表是一种基本的动态数据结构,由一系列节点(Node)组成,每个节点包含一个数据元素和一个指向下一个节点的指针。单向链表的头节点是链表的入口,尾节点指向null。
public class LinkedList {
Node head; // 链表头
public LinkedList() {
head = null;
}
}
链表的增删改查操作实现
1. 链表的添加操作
链表的添加操作分为在链表头插入节点和在链表尾插入节点。
// 在链表头插入节点
public void addFirst(int data) {
Node newNode = new Node(data); // 创建新节点
if (head == null) {
head = newNode; // 空链表
} else {
newNode.next = head; // 新节点指向头节点
head = newNode; // 头指针指向新的节点
}
}
// 在链表尾插入节点
public void addLast(int data) {
Node newNode = new Node(data); // 创建新节点
if (head == null) {
head = newNode; // 空链表
} else {
Node lastNode = head;
while (lastNode.next != null) {
lastNode = lastNode.next; // 移动到最后一个节点
}
lastNode.next = newNode; // 新节点挂在最后一个节点的后面
}
}
2. 链表的删除操作
链表的删除操作分为删除链表头节点和删除链表指定位置的节点。
// 删除链表头节点
public void removeHead() {
if (head != null) {
head = head.next; // 头指针指向下一个节点
}
}
// 删除链表指定位置的节点
public void remove(int index) {
if (index < 0) {
throw new IndexOutOfBoundsException(); // 参数检查
}
if (index == 0) {
removeHead(); // 删除头节点
} else {
Node preNode = head;
Node curNode = head.next;
for (int i = 1; i < index && curNode != null; i++) {
preNode = curNode; // 移动到指定位置
curNode = curNode.next;
}
if (curNode != null) {
preNode.next = curNode.next; // 指定节点的前一个节点指向指定节点的后一个节点
}
}
}
3. 链表的修改操作
链表的修改操作只需要找到指定位置的节点即可。
// 修改链表指定位置的节点
public void set(int index, int data) {
if (index < 0 || index >= size()) {
throw new IndexOutOfBoundsException(); // 参数检查
}
Node curNode = head;
for (int i = 0; i < index; i++) {
curNode = curNode.next; // 移动到指定位置
}
curNode.data = data; // 修改节点数据
}
4. 链表的查询操作
链表的查询操作分为查询头节点、查询尾节点和查询指定位置的节点。
// 查询链表头节点
public Node getFirst() {
return head;
}
// 查询链表尾节点
public Node getLast() {
Node lastNode = head;
while (lastNode != null && lastNode.next != null) {
lastNode = lastNode.next; // 移动到最后一个节点
}
return lastNode;
}
// 查询链表指定位置的节点
public Node get(int index) {
if (index < 0 || index >= size()) {
throw new IndexOutOfBoundsException(); // 参数检查
}
Node curNode = head;
for (int i = 0; i < index; i++) {
curNode = curNode.next; // 移动到指定位置
}
return curNode;
}
总结
本文主要介绍了Java中单向链表的实现方式,并在此基础上实现了链表的增删改查操作。链表是一种基本的动态数据结构,具有动态添加节点,按顺序访问节点等特点,是Java编程中常用的数据结构之一。在实际开发中,我们可以利用链表构建各种应用程序,如字符串匹配、高精度计算等。
