自己实现链表的简单功能

直接上代码

创建接口说面链表中有哪些功能

public interface MySingLeLinkedList {
    public void addFirst(int data);
    //尾插法
    public void addLast(int data);
    //任意位置插入,第一个数据节点为0号下标
    public void addIndex(int index,int data);
    //查找是否包含关键字key是否在单链表当中
    public boolean contains(int key);
    //删除第一次出现关键字为key的节点
    public void remove(int key);
    public void removeAllKey(int key);
    //得到单链表的长度
    public int size();
    public void clear();
    public void display() ;
}

实现接口

public class MyList implements MySingLeLinkedList{
    static class ListNode{
        public int val;
        public ListNode next;
        public ListNode prev;
        public ListNode(int val){
            this.val=val;
        }
    }
    public ListNode head;
    public ListNode last;

    public void addFirst(int data){
        ListNode listNode = new ListNode(data);
        if(head==null){
            head = listNode;
            last = listNode;
        }else {
            listNode.next=head;
            head.prev=listNode;
            head = listNode;
        }

    }
    //尾插法
    public void addLast(int data){
        ListNode listNode = new ListNode(data);
        if(head==null){
            head=listNode;
            last=listNode;
        }else {
            last.next=listNode;
            listNode.prev=last;
            last=listNode;
        }

    }
    //任意位置插入,第一个数据节点为0号下标
    public void addIndex(int index,int data) {
        if(index<0||index>size()){
            System.out.println("下标输入错误");
        }
        if(index==0){
            addFirst(data);
            return;
        }
        if(index==size()){
            addLast(data);
            return;
        }
        ListNode cur = Findindex(index);
        ListNode listNode = new ListNode(data);
        listNode.next=cur.next;
        cur.next=listNode;

    }
    private ListNode Findindex(int index){
        ListNode cur = head;

        while (index!=1){
            cur=cur.next;
            index--;
        }
        return cur;
    }
    //查找是否包含关键字key是否在单链表当中
    public boolean contains(int key) {
        ListNode listNode = new ListNode(key);
        ListNode cur = head;
        while (cur!=null){
            if(cur.val==key){
                return true;
            }
            else
            {
                cur=cur.next;
            }
        }
        return false;
    }
    //删除第一次出现关键字为key的节点
    public void remove(int key) {
        ListNode listNode = new ListNode(key);
        ListNode cur = head;
        if(cur==null){
            System.out.println("没有任何可以删除的了");
            return;
        }
        if(cur.val==key){
            head=head.next;
        }
        if(contains(key)){
            while (cur.next!=null){
                if(cur.next.val==key){
                    cur.next=cur.next.next;
                    return;
                }else {
                    cur=cur.next;
                }
            }
        }
        ;
    }
    public void removeAllKey(int key) {
        ListNode listNode = new ListNode(key);
        ListNode cur = head;
        if(cur==null){
            System.out.println("没有任何可以删除的了");
            return;
        }


            while (cur.next!=null){
                if(cur.val==key){
                    head=head.next;
                }
                else if(cur.next.val==key){
                    cur.next=cur.next.next;
                }else {
                    cur=cur.next;
                }
            }

    }
    //得到单链表的长度
    public int size() {
        int count = 0;
        ListNode cur = head;
        while (cur!=null){
            count++;
            cur=cur.next;
        }
        return count;

    }
    public void clear() {
        head=null;

    }
    public void display() {
        ListNode cur = head;
        while (cur!=null){
            System.out.print(cur.val+" ");
            cur=cur.next;
        }
        System.out.println();
    }

}

进行测试

public class Main {
    public static void main(String[] args) {
        MyList myList = new MyList();
//        myList.addLast(1);
//        myList.addLast(2);
//        myList.addLast(3);
//        myList.addLast(4);
//        myList.addLast(5);
//        myList.addLast(6);
//        myList.addLast(7);
//        myList.addLast(7);
//        myList.addLast(8);
//        myList.addLast(9);
        myList.addLast(7);
        myList.addLast(7);
        myList.addLast(7);
//        myList.addLast(10);
        myList.removeAllKey(7);




        myList.display();

        System.out.println(myList.contains(5));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值