废话不多说,直接上代码。
/**
* @author lizz
* @ClassName MyLinkedList.java
* @Description TODO
* @createTime 2022年04月12日 15:06:00
*/
public class MyLinkedList {
/**
* 头节点指针
*/
private Node head;
/**
* 尾结点指针
*/
private Node last;
/**
* 链表长度
*/
private int size;
/**
* 链表添加元素
* @param data 插入元素
* @param index 插入位置
*/
public void insert(Object data, int index){
if(index < 0 || index > size){
throw new IndexOutOfBoundsException("超出链表范围!");
}
Node currentNode = new Node(data);
if(size==0){ // 空链表
head = currentNode;
last = currentNode;
}else if(index ==0){ // 头部插入
//插入节点的下一个指针指向当前节点
currentNode.next = head;
// 当前节点为插入节点
head = currentNode;
}else if(index == size){ // 尾部插入
last.next = currentNode;
last = currentNode;
}else{ //中间插入
Node prevNode = getNode(index-1);
currentNode.next = prevNode.next;
prevNode.next = currentNode;
}
size++;
}
/**
* 链表删除元素
* @param index 元素位置
*/
public Node delete(int index){
if(index <0 || index >= size){
throw new IndexOutOfBoundsException("超出链表范围!");
}
Node deleteNode = null;
if(index==0){ // 删除头部节点
deleteNode = head;
head = head.next;
}else if(index == size-1){ //删除尾部节点
Node currentNode = getNode(index-1);
currentNode.next = null;
last = currentNode;
}else{ // 删除中间节点
Node prevNode = getNode(index-1);
Node nextNode = prevNode.next.next;
prevNode.next = nextNode;
deleteNode = prevNode.next;
}
size--;
return deleteNode;
}
/**
* 根据位置获取节点信息
* @param index 位置
* @return 节点信息
*/
public Node getNode(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;
}
public void update(Node node ,int index){
Node currentNode = getNode(index);
currentNode.data = node.data;
}
/**
* 输出链表
*/
public void output(){
Node temp = head;
while (temp!=null){
System.out.println(temp.data);
temp = temp.next;
}
System.out.println("------------------------------");
}
/**
* 节点信息
*/
private static class Node{
/**
* 节点数据
*/
Object data;
/**
* 下一个节点
*/
Node next;
public Node(Object data) {
this.data = data;
}
}
public static void main(String[] args) {
MyLinkedList myLinkedList = new MyLinkedList();
myLinkedList.insert("test1",0);
myLinkedList.insert(2,1);
myLinkedList.insert("节点三",2);
myLinkedList.output();
myLinkedList.insert("test2",2);
myLinkedList.output();
myLinkedList.update(new Node("test3"),3);
myLinkedList.output();
myLinkedList.delete(1);
myLinkedList.output();
}
}