Java定义链表
链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。和数组不同,链表中的节点可以在内存中的任意位置,它们通过指针连接起来。链表有许多种类型,比如单向链表、双向链表和循环链表等。
单向链表
单向链表是最简单的链表类型,它的每个节点只包含一个指向下一个节点的指针,最后一个节点的指针指向空。
定义节点类
在Java中,我们可以通过定义一个节点类来表示链表中的每个节点。节点类通常包含两个字段:一个用于保存节点的数据,另一个用于保存指向下一个节点的指针。
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
在上面的示例代码中,data
字段用于保存节点的数据,next
字段用于保存指向下一个节点的指针。构造函数用于初始化节点对象,将传入的数据保存到data
字段,将next
字段初始化为null
。
定义链表类
链表类包含一个指向链表头节点的指针。在链表类中可以定义一些方法来操作链表,比如插入节点、删除节点、遍历链表等。
class LinkedList {
Node head;
public LinkedList() {
this.head = null;
}
// 在链表尾部插入节点
public void append(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}
// 打印链表中的所有节点
public void print() {
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}
在上面的示例代码中,LinkedList
类包含一个指向链表头节点的指针head
。构造函数用于初始化链表对象,将head
指针初始化为null
。append
方法用于在链表尾部插入节点,如果链表为空,则将新节点设置为头节点;否则,找到链表中最后一个节点,将其next
指针指向新节点。print
方法用于遍历链表,并打印每个节点的数据。
使用链表
我们可以通过创建链表对象来使用链表。下面是一个简单的示例,演示了如何创建链表对象,以及如何在链表中插入节点并打印链表。
public class Main {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.append(1);
list.append(2);
list.append(3);
list.print();
}
}
运行上面的示例代码,输出结果为:
1 2 3
双向链表
双向链表(Doubly Linked List)在单向链表的基础上,每个节点除了保存指向下一个节点的指针外,还保存指向前一个节点的指针。
定义节点类
在Java中,我们可以通过定义一个节点类来表示双向链表中的每个节点。节点类通常包含三个字段:一个用于保存节点的数据,一个用于保存指向下一个节点的指针,一个用于保存指向前一个节点的指针。
class Node {
int data;
Node prev;
Node next;
public Node(int data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
在上面的示例代码中,data
字段用于保存节点的数据,prev
字段用于保存指向前一个节点的指针,next
字段用于保存指向下一个节点的指针。构造函数用于初始化节点对象,将传入的数据保存到data
字段,将prev
和next
字段初始化为null
。
定义链表类
链表类包