单链表

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;
}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容