手写LinkListt实现要求:包括add、get、size、indexOf、remove方法的实现。
时间: 2023-07-10 19:30:04 浏览: 45
好的,以下是手写LinkList的实现,包括所需的方法:
```java
public class LinkList<T> {
private Node<T> head;
private int size;
public LinkList() {
head = null;
size = 0;
}
public void add(T data) {
if (head == null) {
head = new Node<>(data);
} else {
Node<T> current = head;
while (current.getNext() != null) {
current = current.getNext();
}
current.setNext(new Node<>(data));
}
size++;
}
public T get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index out of bounds: " + index);
}
Node<T> current = head;
for (int i = 0; i < index; i++) {
current = current.getNext();
}
return current.getData();
}
public int size() {
return size;
}
public int indexOf(T data) {
Node<T> current = head;
int index = 0;
while (current != null) {
if (current.getData().equals(data)) {
return index;
}
current = current.getNext();
index++;
}
return -1;
}
public boolean remove(T data) {
if (head == null) {
return false;
}
if (head.getData().equals(data)) {
head = head.getNext();
size--;
return true;
}
Node<T> previous = head;
Node<T> current = head.getNext();
while (current != null) {
if (current.getData().equals(data)) {
previous.setNext(current.getNext());
size--;
return true;
}
previous = current;
current = current.getNext();
}
return false;
}
private static class Node<T> {
private T data;
private Node<T> next;
public Node(T data) {
this.data = data;
next = null;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
}
}
```
在这个实现中,我们利用一个内部类 `Node` 来表示链表中的节点,每个节点包含一个数据元素和指向下一个节点的指针。链表的头节点通过 `head` 引用来维护。
`add` 方法用于在链表末尾添加一个元素,实现方式是遍历链表直到找到最后一个节点,然后将新元素作为最后一个节点的下一个节点。
`get` 方法用于返回链表中指定索引的元素,实现方式是从头节点开始遍历链表直到找到指定索引的节点,然后返回该节点的数据元素。
`size` 方法用于返回链表的大小,实现方式是直接返回链表中节点的数量。
`indexOf` 方法用于返回链表中指定元素的索引,实现方式是从头节点开始遍历链表直到找到指定元素,然后返回该元素所在节点的索引。如果链表中不存在该元素,则返回 -1。
`remove` 方法用于从链表中删除指定元素,实现方式是从头节点开始遍历链表直到找到指定元素所在的节点,然后将该节点从链表中移除。如果链表中不存在该元素,则返回 false。特别地,如果要删除的元素恰好是头节点所包含的元素,则需要将头节点更新为下一个节点。
希望这个实现能够满足您的要求!