package NODE;
public class NodeController {
//头节点指针
private Node head;
//尾节点指针
private Node last;
//链表实际长度
private int size;
public static void main(String[] args) {
NodeController mynode=new NodeController();
//链表的插入
mynode.insert(0,0);
mynode.insert(1,1);
mynode.insert(2,2);
mynode.insert(3,3);
mynode.insert(-1,2);
//链表的删除
final Node remove = mynode.remove(3);
System.out.println(remove.data+":是删除的节点");
//链表的输出
mynode.output();
}
//链表的删除
private 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-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;
}
private void output() {
Node temp=head;
while (temp!=null){
System.out.println(temp.data);
temp=temp.next;
}
}
/**
* 链表插入元素
* @param data 插入元素
* @param index 插入位置
*/
private void insert(int data, int index) {
if (index<0 ||index > size){
throw new IndexOutOfBoundsException("超出链表范围");
}
Node insertedNode=new Node(data);
if (size ==0){
//空链表
head=insertedNode;
last=insertedNode;
}
//插入头部
else if (index ==0){
//头部执行插入的next 头部变为insertedNode
insertedNode.next=head;
head=insertedNode;
}
else if (index ==size){
//插入尾部
last.next=insertedNode;
last=insertedNode;
}
else {
//插入中间
Node prevNode=get(index-1);
insertedNode.next=prevNode.next;
prevNode.next=insertedNode;
}
size++;
}
/**
* 链表查询元素
* @param index
* @return
*/
private 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;
}
}