1、定义链表类。 2、将链表的建立、初始化、插入、删除、输出表长、查找元素的索引位置、获取指定 位置的元素,打印整个链表等函数实现。 3、设计一个测试类,使其实际运行来测试链表类操作函数的正确性。
时间: 2024-09-20 20:05:55 浏览: 22
1. 定义链表类(LinkedList):
```java
public class LinkedList<T> {
private Node<T> head; // 链表头节点
private int length; // 链表长度
// 构造函数
public LinkedList() {
head = null;
length = 0;
}
// 添加新节点到链表尾部
public void add(T data) {
Node<T> newNode = new Node<>(data);
if (head == null) {
head = newNode;
} else {
Node<T> current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
length++;
}
// 删除指定数据的第一个出现
public boolean remove(T data) {
if (head == null || head.data.equals(data)) {
if (head == head.next) {
head = null;
} else {
head = head.next;
}
length--;
return true;
} else {
Node<T> current = head;
while (current.next != null && !current.next.data.equals(data)) {
current = current.next;
}
if (current.next != null) {
current.next = current.next.next;
length--;
return true;
}
return false;
}
}
// 获取链表长度
public int size() {
return length;
}
// 查找元素的索引位置
public int indexOf(T data) {
Node<T> current = head;
int index = 0;
while (current != null) {
if (current.data.equals(data)) {
return index;
}
current = current.next;
index++;
}
return -1; // 如果未找到,返回-1
}
// 获取指定位置的元素
public T get(int index) {
if (index >= 0 && index < length) {
Node<T> current = head;
for (int i = 0; i < index; i++) {
current = current.next;
}
return current.data;
} else {
throw new IndexOutOfBoundsException("Index out of bounds");
}
}
// 打印链表
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
Node<T> current = head;
while (current != null) {
sb.append(current.data + " -> ");
current = current.next;
}
sb.append("null"); // 补充末尾的空节点
return sb.toString();
}
// Inner class for storing data and next reference
private static class Node<T> {
T data;
Node<T> next;
public Node(T data) {
this.data = data;
this.next = null;
}
}
}
```
2. 测试类(TestLinkedList):
```java
import org.junit.jupiter.api.Test;
public class TestLinkedList {
@Test
public void testLinkedListOperations() {
LinkedList<Integer> list = new LinkedList<>();
// 初始化并添加元素
list.add(1);
list.add(2);
list.add(3);
// 输出初始链表
System.out.println("Initial list: " + list);
// 插入、删除元素并检查
list.add(0); // 插入
System.out.println("After inserting 0: " + list);
list.remove(2); // 删除
System.out.println("After removing 2: " + list);
// 检查大小和索引
assert list.size() == 3;
System.out.println("Size: " + list.size());
assert list.indexOf(1) == 0;
System.out.println("Index of 1: " + list.indexOf(1));
// 获取指定位置的元素
try {
System.out.println("Element at index 2: " + list.get(2));
} catch (IndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
// 清空并再次打印
list.head = null;
System.out.println("Empty list: " + list);
}
}
```