ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA实现单链表

2021-07-24 17:32:21  阅读:170  来源: 互联网

标签:Node head 单链 JAVA 实现 tempNode next null 节点


public class SingleLinkedList<E> {
    //链表头节点指针区
    private Node head;
    //链表头节点数据区
    private Object data;
    //记录链表节点个数
    private int count;

    public void remove(E e){
        //null 要单独使用==判断
        if (e==null){
            //头结点指针区为null,只有一个元素,直接赋值为null交给GC处理
            if (head.next==null){
                head.data=null;
            }else {
                //至少存在两个以上元素,定义变量保存当前遍历的节点,从头结点遍历
                Node tempNode=head;
                //定义变量记录上一节点,头结点非空,至少从第二个以后的节点才出现数据区为null
                Node preNode=head;
                //当前遍历节点数据区不为null
                while (tempNode.data!=null){
                    //记录当前节点
                    preNode=tempNode;
                    //更新遍历的节点信息为下一节点
                    tempNode= tempNode.next;
                }
                //找到了数据区为null的节点保存在tempNode中,且上一节点保存在preNode中
                //将上一节点指针区信息更新为找到的节点的指针区信息,即让上一节点取代当前数据区为null节点的位置指向后面的节点
                preNode.next=tempNode.next;
                //将数据区为null的节点中指针区设为null,交给GC处理
                tempNode.next=null;
            }
            //更新链表个数
            count--;
        }else {
            if (e.equals(head.data)){
                head.data=null;
            }else {
                //至少存在两个以上元素,定义变量保存当前遍历的节点,从头结点遍历
                Node tempNode=head;
                //定义变量记录上一节点,头结点非空,至少从第二个以后的节点才出现数据区为 e 的节点
                Node preNode=head;
                //当前遍历节点数据区不为 e
                while (!e.equals(tempNode.data)){
                    //记录当前节点
                    preNode=tempNode;
                    //更新遍历的节点信息为下一节点
                    tempNode= tempNode.next;
                }
                //找到了数据区为 e 的节点保存在tempNode中,且上一节点保存在preNode中
                //将上一节点指针区信息更新为找到的节点的指针区信息,即让上一节点取代当前数据区为 e 节点的位置指向后面的节点
                preNode.next=tempNode.next;
                //将数据区为 e 的节点中指针区设为null,交给GC处理
                tempNode.next=null;
            }
            //更新链表个数
            count--;
        }
    }

    //链表add方法
    public void add(E e) {
        //先创建一个新节点保存数据
        Node newNode = new Node(e, null);
        if (head == null) {
            head = newNode;
        } else {
            //临时保存节点信息
            Node tempNode = head;
            while (tempNode.next != null) {
                //更新节点信息,指向下一节点
                tempNode = tempNode.next;
            }
            tempNode.next = newNode;
        }
        count++;
    }

    public int size() {
        return count;
    }

    @Override
    public String toString() {
        Object[] obj = new Object[count];
        Node tempNode = head;
        for (int j = 0; j < count; j++) {
            obj[j] = tempNode.data;
            tempNode = tempNode.next;
        }
        return Arrays.toString(obj);
    }

    //链表节点
    private class Node {
        //数据存储区
        private Object data;
        //指针区
        private Node next;

        public Node(Object data, Node next) {
            this.data = data;
            this.next = next;
        }
    }

}

这里只实现了增加和删除的方法,可以基于remove方法增加一个set方法,用来修改链表的值。

标签:Node,head,单链,JAVA,实现,tempNode,next,null,节点
来源: https://blog.csdn.net/m0_52376209/article/details/119061323

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有