AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 更多
    • 题解
    • 分享
    • 问答
    • 应用
  • App
  • 教育优惠
    New
  • 登录/注册

AcWing 14. JAVA模拟单链表    原题链接    简单

作者: 作者的头像   只吃虾仁大雪菜 ,  2022-08-05 21:36:00 ,  所有人可见 ,  阅读 317


3


JAVA模拟单链表

隔一段时间写一遍加强熟练度


import java.util.Iterator;

public class OneLink<E> implements Iterable<E>{
    private Node<E> first;
    private int size;

public void add(E e) { //尾部插入
    Node<E> newNode = new Node<>(e,null);

    if (first == null) {
        first = newNode;
    }else {
        Node node = first;
        while (node.next != null) { // 最后一个节点的特点.next = null
            node = node.next;
        }
        // 循环结束时 node.next == null
        node.next = newNode;
    }
    size ++;
}

public void remove(Object obj) {
    if (first == null) {
        return;
    }
    // 查找被删除目标结点
    Node node = first;
    Node before = null;
    if (obj == null) { // obj是否为空
        while (node != null) {
            if (node.data == null) { //这个点的值
                break;
            }
            before = node;
            node = node.next;
        }
    }else {
        while (node != null) {
            if (obj.equals(node.data)) { //这个点的值
                break;
            }
            before = node;
            node = node.next;
        }
    }
    // 如果全部找完 都没有找到  node == null
    if (node == null){ // 不存在被删除的目标 return
        return;
    }
    //  找到被删除的结点 分两种情况  是第一个结点  不是第一个结点
    if (before == null) {
        first = node.next;
    }else {
        before.next = node.next;
    }

    node.next = null;
    node.data = null;
    size --;
}

    @Override
    public Iterator<E> iterator() { // 返回一个iterator对象
        return new Itr();
    }
    private class Itr implements Iterator<E> { // 实现Iterator接口的class
    //  生成游标
        Node node = first;

        @Override
        public boolean hasNext() {
            return node != null;
        }

        @Override
        public E next() {
            E data = (E) node.data;
            node = node.next;
            return data;
        }

    }

    private static class Node<E> {
        E data;
        Node<E> next;

        public Node(E data, Node<E> next) {
            this.data = data;
            this.next = next;
        }
    }
}

测试 TestOneLink


import java.util.Iterator;

public class TestOneLink {
    public static void main(String[] args) {
        OneLink<String> list = new OneLink<>();
        list.add("hello");
        list.add("python1");
        list.add("java");
        list.add("python2");
        list.add("world");

        for (String s : list) {
            System.out.println(s);
        }

        list.remove("python1");
        list.remove("python2");

        System.out.println("-------------");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

0 评论

你确定删除吗?

© 2018-2023 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息