Java单链表的创建
1. 引言
单链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。相比于数组,单链表在插入和删除操作上有更好的性能,但在访问元素时效率较低。本文将介绍如何使用Java语言创建和操作单链表,并给出相应的代码示例。
2. 单链表的定义
单链表是一种递归的数据结构,它由若干个节点组成。每个节点包含两部分信息:数据域和指针域。数据域存储节点的数据,指针域存储指向下一个节点的指针。
单链表使用一个头节点来指向链表的第一个节点,当链表为空时,头节点的指针域为空。当链表不为空时,头节点的指针域指向第一个节点。
下图是一个单链表的示意图:
erDiagram
HEAD_NODE ||--o FIRST_NODE : next
FIRST_NODE ||--o SECOND_NODE : next
SECOND_NODE ||--o THIRD_NODE : next
THIRD_NODE ||--o NULL
3. Java单链表的实现
3.1 节点类的定义
首先,我们需要定义一个节点类来表示单链表中的每个节点,该类包含数据和指向下一个节点的指针。
public class Node {
public int data;
public Node next;
}
3.2 单链表类的定义
接下来,我们需要定义一个单链表类来实现单链表的各种操作。
public class LinkedList {
private Node head;
public LinkedList() {
head = null;
}
// 在链表头部插入一个节点
public void insertAtHead(int data) {
Node newNode = new Node();
newNode.data = data;
newNode.next = head;
head = newNode;
}
// 在链表尾部插入一个节点
public void insertAtTail(int data) {
Node newNode = new Node();
newNode.data = data;
newNode.next = null;
if (head == null) {
head = newNode;
return;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
// 在指定位置插入一个节点
public void insertAtPosition(int data, int position) {
Node newNode = new Node();
newNode.data = data;
if (position == 1) {
newNode.next = head;
head = newNode;
return;
}
Node previous = head;
int counter = 1;
while (counter < position - 1 && previous.next != null) {
previous = previous.next;
counter++;
}
if (previous == null) {
System.out.println("Position out of range");
return;
}
newNode.next = previous.next;
previous.next = newNode;
}
// 删除链表头部节点
public void deleteAtHead() {
if (head == null) {
return;
}
head = head.next;
}
// 删除链表尾部节点
public void deleteAtTail() {
if (head == null || head.next == null) {
head = null;
return;
}
Node previous = null;
Node current = head;
while (current.next != null) {
previous = current;
current = current.next;
}
previous.next = null;
}
// 删除指定位置的节点
public void deleteAtPosition(int position) {
if (position == 1) {
head = head.next;
return;
}
Node previous = head;
int counter = 1;
while (counter < position - 1 && previous.next != null) {
previous = previous.next;
counter++;
}
if (previous.next == null) {
System.out.println("Position out of range");
return;
}
previous.next = previous.next.next;
}
// 打印链表中的所有节点
public void printList() {
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}
4. 单链表的操作示例
下面是一些使用Java单链表的示例操作:
public class Main {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.insertAtHead(3