内部类 LinkedList 删改查
时间: 2024-01-12 20:42:03 浏览: 26
LinkedList 是一个双向链表,可以在任意位置进行插入、删除、修改和查找操作,其内部类包括 Node 和 ListIterator。
1. Node 内部类
Node 是 LinkedList 中的节点类,包括存储元素的值(element)、前一个节点的指针(prev)和后一个节点的指针(next)。
在 LinkedList 中插入、删除、修改和查找元素时,需要通过 Node 类来访问节点的值和指针。
例如,要删除一个节点,可以通过调用 Node 类的 remove 方法来删除该节点:
```
private static class Node<E> {
E element;
Node<E> prev;
Node<E> next;
Node(Node<E> prev, E element, Node<E> next) {
this.element = element;
this.prev = prev;
this.next = next;
}
void remove() {
prev.next = next;
next.prev = prev;
}
}
```
2. ListIterator 内部类
ListIterator 是 LinkedList 中的迭代器类,用于遍历链表并访问节点。
ListIterator 包括当前节点的指针(current)、前一个节点的指针(previous)和后一个节点的指针(next)。
在 LinkedList 中插入、删除、修改和查找元素时,可以通过 ListIterator 类来访问节点并进行操作。
例如,要在 LinkedList 中插入一个元素,可以通过 ListIterator 类的 add 方法来插入新节点:
```
private class ListItr implements ListIterator<E> {
// ...
public void add(E e) {
Node<E> newNode = new Node<>(next.prev, e, next);
next.prev.next = newNode;
next.prev = newNode;
nextIndex++;
expectedModCount++;
}
}
```
3. 删除元素
要删除 LinkedList 中的一个元素,可以通过 ListIterator 类的 remove 方法来删除节点,该方法会删除当前节点并将指针指向下一个节点。
例如,要删除元素为 x 的节点,可以通过如下代码来实现:
```
ListIterator<E> itr = list.listIterator();
while (itr.hasNext()) {
E element = itr.next();
if (element.equals(x)) {
itr.remove();
break;
}
}
```
4. 修改元素
要修改 LinkedList 中的一个元素,可以通过 ListIterator 类的 set 方法来修改节点的值。
例如,要将元素为 x 的节点的值修改为 y,可以通过如下代码来实现:
```
ListIterator<E> itr = list.listIterator();
while (itr.hasNext()) {
E element = itr.next();
if (element.equals(x)) {
itr.set(y);
break;
}
}
```
5. 查找元素
要查找 LinkedList 中的一个元素,可以通过 ListIterator 类的 hasNext 和 next 方法来遍历链表并访问节点。
例如,要查找元素为 x 的节点,可以通过如下代码来实现:
```
ListIterator<E> itr = list.listIterator();
while (itr.hasNext()) {
E element = itr.next();
if (element.equals(x)) {
// 找到了元素 x
break;
}
}
```