设计一个类MyLinkedList,模拟LinkedList的基本操作。要求:画出MyLinkedList的类图,然后再根据类图设计MyLinkedList类。java
时间: 2024-10-08 15:01:28 浏览: 18
为了设计一个名为`MyLinkedList`的类,模拟`LinkedList`的基本操作,首先我们需要理解`LinkedList`是一个双向链表数据结构,包含节点(Node),每个节点包含了数据和指向前后节点的引用。在这个自定义版本中,我们可以考虑以下几个核心属性和方法:
1. 类图设计:
- MyLinkedList:作为顶级类,包含节点列表(Node List)和头部指针(head)等基本属性。
- Node:内部类,代表链表的一个元素,包含数据(data)和两个引用(prev 和 next),分别指向前一个节点和后一个节点。
```plaintext
+---------+ +-------+
| MyLinkedList |-------------| Node |
+---------+ +-------+
| head | - - - - > | data |
| | | prev |
| | +--+
```
2. `MyLinkedList`类设计:
```java
public class MyLinkedList<T> {
private Node<T> head; // 头部节点
private int size; // 链表长度
// 构造函数,初始化空链表
public MyLinkedList() {
this.head = null;
this.size = 0;
}
// 添加元素到链表尾部
public void addLast(T data) {
if (head == null) {
head = new Node<>(data);
} else {
Node<T> current = head;
while (current.next != null) {
current = current.next;
}
current.next = new Node<>(data);
current.next.prev = current;
}
size++;
}
// 添加元素到指定位置
public void add(int index, T data) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("Index out of bounds");
}
if (index == 0) {
head = new Node<>(data, head);
head.prev = null;
} else {
Node<T> current = head;
for (int i = 0; i < index - 1; i++) {
current = current.next;
}
Node<T> newNode = new Node<>(data);
newNode.prev = current;
newNode.next = current.next;
if (current.next != null) {
current.next.prev = newNode;
}
current.next = newNode;
}
size++;
}
// 删除指定索引的元素
public void remove(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index out of bounds");
}
if (index == 0) {
head = head.next;
if (head != null) {
head.prev = null;
} else {
size = 0;
}
} else {
Node<T> current = head;
for (int i = 0; i < index - 1; i++) {
current = current.next;
}
current.next = current.next.next;
if (current.next != null) {
current.next.prev = current;
} else {
current.prev = null;
}
}
size--;
}
// 其他方法如获取/设置特定索引的值、遍历等...
}
```
阅读全文