简单的单链表的实现

实现链表,是一个对于java新手来说,这是一个非常考验自己的逻辑结构的一个小项目,同学们都可以试一下,对自己的提升有很大的帮助。

视频资源是我一直推荐的尚学堂高琦的java300集:https://www.bilibili.com/video/BV1dW411Q7mY?p=145

选择Linkedlist的那一块有详细的解释,视频是免费观看的,这个大家不用担心。

这里是源代码 :

public class linkedListTest1 <E>{
    private Node first;
    private Node last;
    private int  size;
    public Object get(int index){

        cherkRange(index);
        Node temp = getNode(index);
        return temp!=null?temp.element:null;
    }

    private void cherkRange(int index){
        if (index<0||index>size-1){
            throw new RuntimeException("索引数字不合法"+index);  //抛出异常
        }

    }


    public void add(E e) {
        Node node = new Node(e);
        if (first==null) {

			node.preious = node;
			node.next = null;
            first = node;
            last = node;

        }else {

            node.preious = last;
            node.next = null;
            last.next = node;
            last = node;

        }
        size++;
    }

    public void add (int index,E e){
        cherkRange( index);
        Node Newnode = new Node(e);
        Node temp = getNode(index);
        if(temp!=null){
            Node up = temp.preious;

            up.next = Newnode;
            Newnode.preious = up;
            temp.preious = Newnode;
            Newnode.next = temp;
        }
        size++;
    }
    private Node getNode(int index){
        cherkRange( index);
        Node temp = first;
        if(index<=(size>>1)){
            for (int i = 0 ;i < index ; i++ ){
                temp = temp.next;
            }
        }else {
            temp = last;
            for (int i = size - 1; i > index; i--) {
                temp = temp.preious;
            }
        }
        return temp;
    }


    //index为对应的索引值.
    public void remove(int index){
        cherkRange( index);
        Node tempe = getNode(index);

        if(tempe!= null){
            Node up = tempe.preious;
            Node down = tempe.next;

            System.out.println(up.element);
            System.out.println(down.element);
            System.out.println("12345554566");
            if(down!=null){
                up.next = down;
            }

            if(up!=null){
                down.preious = up;
            }

            if(index==0){
                first = down;
            }
            if(index==size-1){
                last = up;
            }
            size--;

        }
    }

    public String toString() {
        Node temp = first;
        while (temp!= null) {
            System.out.println(temp.element);
            temp = temp.next;
        }
        return "好好";
    }

    public static void main(String[] args) {
        linkedListTest1<String> list = new linkedListTest1();
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println(list);
        System.out.println(list.get(0));

        list.remove(0);
        System.out.println(list);
        list.add(1,"123");
        System.out.println(list);
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值