双向链表实现

public class LinkedTable<T> {
    //双向链表
    //节点内部类,包含前一个节点prev、后一个节点next、节点值value
   private class Node{
        Node prev;
        Node next;
        T value;
        private Node(){}
        private Node(T value){
           this.value = value;
        }
    }
    private Node head; //虚拟头节点
    private Node tail;  //虚拟尾节点
    private Integer size; //链表大小
    //初始化
    public LinkedTable(){
        head = new Node();
        tail = new Node();
        head.next = tail;
        tail.prev = head;
        size = 0;
    }
    public boolean insert(Integer index,T element){
        if(index < 0)
            return false;
        if(index > size)
            return false;
        Node current = head;
        for(int i = 0; i <= index; i++){
            current = current.next;
        }
        Node newNode = new Node(element);

        current.prev.next = newNode;
        newNode.prev = current.prev;
        current.prev = newNode;
        newNode.next = current;
        size++;
        return true;
    }

    public boolean insertAtFirst(T element){
        return insert(0,element);
    }
    public boolean insertAtLast(T elements){
        return insert(size,elements);
    }

    public boolean delete(Integer index){
        if(index < 0)
            return false;
        if(index >= size)
            return false;
        Node current = head;
        for(int i = 0; i <= index; i++)
            current = current.next;
        current.prev.next = current.next;
        current.next.prev = current.prev;
        size--;
        return true;
    }
    public  boolean deleteAtFirst(){
        return delete(0);
    }
    public boolean deleteAtLast(){
        return delete(size-1);
    }

    public T get(Integer index){
        if(index < 0 || index >= size)
            return null;
        Node current = head;
        for(int i = 0; i <= index; i++)
            current = current.next;
        return current.value;
    }
    public T getFirst(){
        return get(0);
    }
    public T getLast(){
        return get(size-1);
    }

    public String toString(){
        Node current = head;
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < size; i++){
            current = current.next;
            sb.append(current.value.toString());
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        LinkedTable<String> linkedTable = new LinkedTable<>();
        System.out.println(linkedTable.get(0)); //null
        linkedTable.insert(0,"A");
        linkedTable.insertAtFirst("B");
        linkedTable.insertAtLast("C");
        System.out.println(linkedTable);  //BAC
        System.out.println(linkedTable.getFirst());//B
        System.out.println(linkedTable.getLast());//C
        System.out.println(linkedTable.get(1));//A
        System.out.println(linkedTable.deleteAtLast()); //true
        System.out.println(linkedTable); //BA
        System.out.println(linkedTable.delete(1)); //true
        System.out.println(linkedTable); //B
        System.out.println(linkedTable.deleteAtLast()); //true
        System.out.println(linkedTable); //
    }
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值