java LinkBox

网课学习笔记
还不是很理解,先记下来…

package util;

public class LinkBox implements Box{
    private Node first;//记录首节点
    private Node last;//记录尾节点
    private int size;//记录有效元素个数

    private void newLast(int element){//将新数据插入链表的尾端
        Node l = last;
        Node newNode = new Node(l,element,null);//新节点变成尾节点
//        将新节点对象设置为尾节点
        last = newNode;
//        System.out.println(last);
        if(l == null){
            first = newNode;
        }else{
            l.next = newNode;
        }
//        有效元素加1
        size ++;
    }
//    添加
    private Node node(int index){
        Node targetNode;//
        //判断index范围是前半部分还是后半部分
        if(index < (size>>1)){//前半部分
            targetNode = first;
            for(int i = 0; i < index; i ++){
                targetNode = targetNode.next;
            }
        }else{//后半部分
            targetNode = last;
            for(int i = size-1; i > index; i --){
                targetNode = targetNode.pre;
            }
        }
        return targetNode;
    }

//    删除 将给定的node节点对象删除  并保留数据
    private int unlink(Node targetNode){
//        获取当前node的item信息
        int oldVal = targetNode.item;
//        当前node的前一个
        Node pre = targetNode.pre;
//        当前node的下一个
        Node next = targetNode.next;
//        删除节点对象
        if(pre==null){//当前节点是第一个
            first = next;//第一个等于下一个
        }else {//当前节点不是第一个
            pre.next = next;//前一个的下一个等于下一个
            targetNode.pre = null;
        }
        if(next==null){//当前node是最后一个
            last = pre;
        }else {
            next.pre = pre;//上一个的下等于前一个
            targetNode.next = null;
        }
        size --;
        return oldVal;
    }


    public boolean add(int element) {
//        将element存放入一个新的node对象里 添加到链表的额尾端
        this.newLast((element));
        System.out.printf("添加成功");
        return true;
    }

    public int get(int index) {
//        检测范围

//        找到index位置的那个node
        Node targetNode = this.node(index);



//        返回
        return targetNode.item;
    }

    public int remove(int index) {
//检测范围
//        找到index位置的那个node
        Node targetNode = this.node(index);
//        //        删除当前的目标节点 返回oldVal
        int oldVal = this.unlink(targetNode);
        return oldVal;
    }

    public int size() {
        return size();
    }
}

interface

package util;

public interface Box {
    public boolean add(int element);
    public int get(int index);
    public int remove(int index);
    public int size();

}

节点类

package util;

public class Node {
    public Node pre;//上一个node对象
    public int item;//当前数据
    public Node next;//下一个node对象

    public Node(Node pre,int item,Node next){
        this.pre = pre;
        this.item = item;
        this.next = next;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值