public class LinkedListTest {
private Node head;
private Node last;
private int size;
// 插入
public void insert(int data, int index) throws Exception {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("超出链表节点范围!");
}
Node insertedNode = new Node(data);
if (size == 0) {
// 空链表
head = insertedNode;
last = insertedNode;
} else if (index == 0) {
// 头部插入
insertedNode.next = head;
head = insertedNode;
} else if (index == size) {
// 尾部插入
last.next = insertedNode;
last = insertedNode;
} else {
// 中间插入
Node preNode = get(index - 1);
insertedNode.next = preNode.next;
preNode.next = insertedNode;
}
size += 1;
}
// 删除
public Node remove(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("超出链表节点范围!");
}
Node removeNode = null;
if (index == 0) {
// 头节点
removeNode = head;
head = head.next;
} else if (index == size) {
// 尾节点
Node preNode = get(index-1);
removeNode = preNode.next;
preNode.next = null;
last = preNode;
} else {
// 中间删除
Node preNode = get(index - 1);
removeNode = preNode.next;
preNode.next = preNode.next.next;
removeNode.next = null;
}
size-=1;
return removeNode;
}
// 查找
public Node get(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("超出链表节点范围!");
}
Node temp = head;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
return temp;
}
static class Node {
public Node next;
public int data;
public Node(int data) {
this.data = data;
}
}
}