LinkedList实现

class MyLinkedList {
private class Node{
E element;
Node previous;//节点
Node next;
public Node(E element) {
this.element = element;
}
}
private Node first;//头节点
private Node last;//尾节点
private int count;
//添加元素
public void add(E element){
Node node = new Node(element);//创建一个节点,其中存放的数据就是element所接受的到的值
if (count==0){//判断链表,如果是空链表,那么这个新节点,就作为头结点
this.first = node;
}else {//否则不是一个空链表,要把最后一个节点的下一个节点设置为新的节点
this.last.next = node;
node.previous = this.last;//把这个新的节点上一个节点,设置为这个链表之前的那个尾节点
}
this.last = node;//把链表的尾节点设置为新节点
count++;
}

public void add(int index,E element){
    Node node = new Node(element);
    if(index==0){
        this.first.previous = node;
        node.next = this.first;
        this.first = node;
    }else if(index == count){
        this.last.next=node;
        node.previous=this.last;
        this.last=node;
    }else {
        Node target = getNode(index);
        node.next = target;
        node.previous = target.previous;
        target.previous.next = node;
        target.previous = node;
    }
    count++;
}

private  Node getNode(int index){
    if(index<0||index>=count){
        throw  new IndexOutOfBoundsException("下标越界");
    }
    Node node = this.first;
    for (int i=0;i<index;i++){
        node = node.next;
    }
    return  node;
}

//删除指定下表的元素
public E remove(int index){
Node node = getNode(index);
removeNode(node);
return node.element;
}
private void removeNode(Node node) {
if(count1){
this.first = null;
this.last = null;
count–;
return;
}
if (node
this.first){
this.first = this.first.next;
this.first.previous.next=null;
this.first.previous=null;
}else if (node == this.last){
this.last = this.last.previous;
this.last.next.previous=null;
this.last.next=null;
}else {
node.previous.next = node.next;
node.next.previous=node.previous;
node.previous=null;
node.next=null;
}
count–;
}

//根据元素进行删除
public boolean remove(E element) {
    Node node = getNode(element);
    if (node == null)
        return false;
    removeNode(node);
    return true;
}
    private Node getNode(E element){
        Node node = this.first;
        while (node!=null){
            if (node.element.equals(element)){
                return  node;
            }
            node = node.next;
        }
        return null;
    }
    //清空链表
public  void  clear(){
    this.first = null;
    this.last = null;
    count = 0;
}
//将链表中指定下标节点的元素值修改为指定的值
public  E set(int index,E element){
    Node node = getNode(index);
    E ele = node.element;
    node.element = element;
    return  ele;
}
//根据下标获取指定的元素
public E get(int index){
    Node node = getNode(index);
    return  node.element;
}
public int size(){
    return  count;
}
public  boolean contains(E element){
    return  indexOf(element)!=-1;
}
public  int indexOf(E element){
    Node node = this.first;
    for (int i=0;i<count;i++){
        if(node.element.equals(element)){
            return  i;
        }
        
    }
    return  -1;
}

public  String toString(){
    if(count==0) return "[]";
    StringBuilder stringBuilder = new StringBuilder("[");
    Node node = this.first;
    for(int i=0;i<count;i++){
        stringBuilder.append(node.element).append(",");
        node=node.next;
    }
    stringBuilder.replace(stringBuilder.length()-2,stringBuilder.length(),"]");
    return stringBuilder.toString();
}}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华华华华华12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值