java实现纯粹的插入和删除操做
package com.atguigu.priciple.algorithm;
public class linked {
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 (size == index){
last.next = insertedNode;
last = insertedNode;
}else {
Node prevNode = get(index-1);
insertedNode.next = prevNode.next;
prevNode.next = insertedNode;
}
size++;
}
public Node remove(int index) throws Exception{
if (index<0 || index>=size){
throw new IndexOutOfBoundsException("超出链表节点的范围!");
}
Node removeNode = null;
if (index == 0){
removeNode = head;
head = head.next;
}else if (index == size-1){
Node prevNode = get(index-1);
removeNode = prevNode.next;
prevNode.next = null;
last = prevNode;
}else {
Node prevNode = get(index-1);
Node nextNode = prevNode.next.next;
removeNode = prevNode.next;
prevNode.next = nextNode;
}
size--;
return removeNode;
}
public Node get(int index) throws Exception{
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 output(){
Node temp = head;
while (temp!=null){
System.out.println(temp.data);
temp = temp.next;
}
}
private static class Node{
int data;
Node next;
Node(int data){
this.data = data;
}
}
public static void main(String[] args) throws Exception{
linked linked = new linked();
linked.insert(3,0);
linked.insert(7,1);
linked.insert(9,2);
linked.insert(5,3);
linked.insert(6,1);
linked.remove(0);
linked.output();
}
}