会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132390个问题

老师这个是什么问题

package com.bjxst;

public class MyDoublyLinkedList<E> implements MyList<E> {
    private Node head;
    private Node tail;
    private int size;

    @Override
    public void add(E element) {
        this.linkedLast(element);

    }
    private void linkedLast(E element){
        //首先获取尾部节点
        Node t = this.tail;
        //创建节点对象
        Node node1 =new Node(t,null,element);

        node1=this.tail;
        if(t==null){
            node1 =this.head;
        }else{
            node1 = t.next;
        }
        this.size++;
    }

    @Override
    public E get(int index) {
        //对Index做合法性校验
        this.checkIndex(index);

        //根据节点对象查找位置
        Node<E> node = this.getNode(index);
        return node.item;

    }
    private void checkIndex(int index){
        if(!(index>=0&&index<this.size)){
            throw new IndexOutOfBoundsException("index"+index+"size"+size);
        }
    }
    private Node getNode(int index){
        if (index<(this.size>>1)){
            Node node = this.head;
            for (int i=0;i<index;i++){
                node = node.next;
            }
            return node;
        }else{
            Node node = this.tail;
            for (int i=this.size-1;i>index;i--){
                node = node = node.prev;
            }
            return node;
        }




    }

    @Override
    public int size() {
        return this.size;
    }

    @Override
    public E remove(int index) {
        //对index进行合法性校验
        this.checkIndex(index);
        //根据指定位置获取节点对象
        Node<E> node = this.getNode(index);
        //获取节点对象中的元素
        E item = node.item;
        //判断当前节点是否为头节点
        if(node.prev ==null){
            node.next=this.head;

        }else{
            node.prev.next = node.next;

        }
        //判断当前节点是否为尾结点
        if(node.next==null){
            node.prev = this.tail;
        }else{
            node.next.prev = node.prev;
        }
        node.next =null;
        node.prev= null;
        node.item =null;

        this.size--;
        return item;


    }
    //创建节点内部类
    class Node<E>{
        E item;
        Node<E> prev;
        Node<E> next;
        Node(Node<E> prev,Node<E> next,E item){
            this.prev = prev;
            this.next=next;
            this.item = item;
        }
    }
    public void addFirst(E element){
        this.linkFirst(element);
    }
    private void linkFirst(E element){
        //获取头结点对象
        Node head = this.head;
        Node node1 = new Node(null,head,element);
        //将新节点定为头节点
        node1 =this.head;

        if(head==null){
            node1 = this.tail;
        }else{
            node1=head.prev;
        }
        this.size++;
    }
    public void addLast(E element){
        this.linkedLast(element);
    }

    public static void main(String[] args) {
        MyList<String> myList = new MyDoublyLinkedList<>();
        myList.add("a");
        myList.add("b");
        myList.add("at");
        myList.add("e");
        myList.add("e");



        System.out.println(myList.remove(3));
    }
}

屏幕截图 2021-08-30 093615.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 17386楼

package com.bjxst;

public class MyDoublyLinkedList<E> implements MyList<E> {
    private Node head;
    private Node tail;
    private int size;

    @Override
    public void add(E element) {
        this.linkedLast(element);

    }
    private void linkedLast(E element){
        //首先获取尾部节点
        Node t = this.tail;
        //创建节点对象
        Node node1 =new Node(t,null,element);

        node1=this.tail;
        if(t==null){
            node1 =this.head;
        }else{
            node1 = t.next;
        }
        this.size++;
    }

    @Override
    public E get(int index) {
        //对Index做合法性校验
        this.checkIndex(index);

        //根据节点对象查找位置
        Node<E> node = this.getNode(index);
        return node.item;

    }
    private void checkIndex(int index){
        if(!(index>=0&&index<this.size)){
            throw new IndexOutOfBoundsException("index"+index+"size"+size);
        }
    }
    private Node getNode(int index){
        if (index<(this.size>>1)){
            Node node = this.head;
            for (int i=0;i<index;i++){
                node = node.next;
            }
            return node;
        }else{
            Node node = this.tail;
            for (int i=this.size-1;i>index;i--){
                node = node = node.prev;
            }
            return node;
        }




    }

    @Override
    public int size() {
        return this.size;
    }

    @Override
    public E remove(int index) {
        //对index进行合法性校验
        this.checkIndex(index);
        //根据指定位置获取节点对象
        Node<E> node = this.getNode(index);
        //获取节点对象中的元素
        E item = node.item;
        //判断当前节点是否为头节点
        if(node.prev ==null){
            node.next=this.head;

        }else{
            node.prev.next = node.next;

        }
        //判断当前节点是否为尾结点
        if(node.next==null){
            node.prev = this.tail;
        }else{
            node.next.prev = node.prev;
        }
        node.next =null;
        node.prev= null;
        node.item =null;

        this.size--;
        return item;


    }
    //创建节点内部类
    class Node<E>{
        E item;
        Node<E> prev;
        Node<E> next;
        Node(Node<E> prev,Node<E> next,E item){
            this.prev = prev;
            this.next=next;
            this.item = item;
        }
    }
    public void addFirst(E element){
        this.linkFirst(element);
    }
    private void linkFirst(E element){
        //获取头结点对象
        Node head = this.head;
        Node node1 = new Node(null,head,element);
        //将新节点定为头节点
        node1 =this.head;

        if(head==null){
            node1 = this.tail;
        }else{
            node1=head.prev;
        }
        this.size++;
    }
    public void addLast(E element){
        this.linkedLast(element);
    }

    public static void main(String[] args) {
        MyList<String> myList = new MyDoublyLinkedList<>();
        myList.add("a");
        myList.add("b");
        myList.add("at");
        myList.add("e");
        myList.add("e");



        System.out.println(myList.remove(3));
    }
}

屏幕截图 2021-08-30 093615.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 17387楼
Python 全系列/第一阶段:Python入门/控制语句 17389楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 17390楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 17393楼
WEB前端全系列/第二阶段:JavaScript编程模块/运算符_数据类型和流程循环语句 17396楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 17398楼
JAVA 全系列/第八阶段:Linux入门到实战/Linux(旧) 17400楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637