欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构-链表插入

程序员文章站 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();


}
相关标签: 数据结构