数据结构-链表插入
程序员文章站
2022-03-22 19:53:04
...
//头节点指针
private Node head;
//尾节点指针
private Node last;
//链表实际长度
private int size;
/**
* 链表插入元素
* @param data 插入元素
* @param index 插入位置
*/
public 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){
//插头部
insertedNode.next = head;
head = insertedNode;
} else if (index==index){
//插尾部
last.next=insertedNode;
last=insertedNode;
} else {
//插中间
Node prevNode = get(index - 1);
insertedNode.next = prevNode.next;
prevNode.next = insertedNode;
}
size++;
}
/**
* 链表删除元素
* @param index
* @return
*/
public Node remove(int index){
if (index < 0 || index>=size){
throw new IndexOutOfBoundsException("超出链表节点范围");
}
Node removedNode = null;
if (index == 0 ){
//删除头节点
removedNode = head;
head = head.next;
}else if(index == size-1){
//删除尾节点
Node prevNode = get(index-1);
removedNode = prevNode.next;
prevNode.next = null;
last = prevNode;
} else {
//删除中间节点
Node prevNode = get(index-1);
Node nextNode = prevNode.next.next;
removedNode = prevNode.next;
prevNode.next = nextNode;
}
size--;
return removedNode;
}
/**
* 链表查找元素
* @param index
* @return
*/
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;
}
System.out.println("测试:"+temp);
return temp;
}
/**
* 输出链表
*/
public void output(){
Node temp = head;
while (temp!=null){
System.out.println(temp.data);
temp=temp.next;
}
}
public static class Node {
int data;
Node next;
Node(int data) {
this.data = data;
}
}
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
linkedList.insert(3,0);
linkedList.insert(7,1);
linkedList.insert(9,2);
linkedList.insert(5,3);
linkedList.insert(6,1);
linkedList.remove(0);
linkedList.output();
}
上一篇: 了解百亿级数据分表后的 分页查询
下一篇: C++ STL容器(一)之vector