为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 网络编程 > 其它综合 正文

数据结构:链表《单链表》

三叶资源网 2022-10-23 19:18:50 其它综合 205 ℃ 0 评论

在上一篇文章 数据结构:链表《概念》中已经介绍了什么是链表以及链表的特性是什么,废话不多说直接上干货如果实现一个单链表。

import java.util.Objects;

/**

 * @ClassName SingleLinkedNodeDemo
 * @Description 单链表
 */
public class SingleLinkedNodeDemo {


    public static void main(String[] args) {
        LinkedNode node6 = new LinkedNode(6, "A6");
        LinkedNode node1 = new LinkedNode(1, "A1");
        LinkedNode node2 = new LinkedNode(2, "A2");
        LinkedNode node5 = new LinkedNode(5, "A5");
        LinkedNode node3 = new LinkedNode(3, "A3");
        LinkedNode node4 = new LinkedNode(4, "A4");
        LinkedNode node7 = new LinkedNode(7, "A7");


        //添加节点到尾部
       /* SingleLinkedList singleLinkedList = new SingleLinkedList();
        singleLinkedList.addLinkedNode(node6);
        singleLinkedList.addLinkedNode(node1);
        singleLinkedList.addLinkedNode(node2);
        singleLinkedList.addLinkedNode(node5);
        singleLinkedList.addLinkedNode(node3);
        singleLinkedList.addLinkedNode(node4);
        singleLinkedList.addLinkedNode(node7);
        singleLinkedList.print();*/
        System.out.println("==============================");
       //按照顺序添加节点
        SingleLinkedList singleLinkedListSort = new SingleLinkedList();
        singleLinkedListSort.addLinkedNodeBySort(node6);
        singleLinkedListSort.addLinkedNodeBySort(node1);
        singleLinkedListSort.addLinkedNodeBySort(node2);
        singleLinkedListSort.addLinkedNodeBySort(node5);
        singleLinkedListSort.addLinkedNodeBySort(node3);
        singleLinkedListSort.addLinkedNodeBySort(node4);
        singleLinkedListSort.addLinkedNodeBySort(node7);
        singleLinkedListSort.print();

        System.out.println(">>>>>>>>>>>>>>>>获取某个节点");
        LinkedNode node = singleLinkedListSort.getLinkedNodeByKey(3);
        System.out.println(node);

        singleLinkedListSort.removeLinkedNode(node4);
        System.out.println(">>>>>>>>>>>>>>>>移除节点");
        singleLinkedListSort.print();

        System.out.println(">>>>>>>>>>>>>>>>修改节点");
        singleLinkedListSort.updateLinkedNode(new LinkedNode(5, "A55555"));
        singleLinkedListSort.print();

    }


    private static class SingleLinkedList{
        //定义链表头部节点
        private LinkedNode headLinkedNode = new LinkedNode(0, null);

        /**
         * 修改节点
         * @param node
         */
        public void updateLinkedNode(LinkedNode node) {
            LinkedNode tempLinkedNode = headLinkedNode.nextNode;
            while (true) {
                if ( Objects.isNull(tempLinkedNode)) {
                    break;
                }
                if (tempLinkedNode.key == node.key) {
                    tempLinkedNode.value = node.value;
                    break;
                }
                tempLinkedNode = tempLinkedNode.nextNode;
            }
        }

        /**
         * 移除节点
         * @param node
         */
        public void removeLinkedNode(LinkedNode node) {
            LinkedNode tempLinkedNode = headLinkedNode;
            while (true) {
                if (Objects.isNull(tempLinkedNode.nextNode)) {
                    break;
                }
                if (tempLinkedNode.nextNode.key == node.key) {
                    //当前节点的KEY 等于要移除节点的KEY 把当前节点指针指向移除节点的下一个节点即可
                    tempLinkedNode.nextNode = tempLinkedNode.nextNode.nextNode;
                    break;
                }
                tempLinkedNode = tempLinkedNode.nextNode;
            }
        }

        /**
         * 根据节点KEY 获取节点信息
         * @param key
         * @return
         */
        public LinkedNode getLinkedNodeByKey(int key){
            if(Objects.isNull(headLinkedNode.nextNode)){
                return null;
            }
            LinkedNode tempLinkedNode =  headLinkedNode.nextNode;
            while (Objects.nonNull(tempLinkedNode)){
                if(key == tempLinkedNode.key){
                    return  tempLinkedNode;
                }
                tempLinkedNode = tempLinkedNode.nextNode;
            }
            return null;
        }
        /**
         * 按照顺序添加节点
         * @param node
         */
        public void addLinkedNodeBySort(LinkedNode node){
            LinkedNode tempLinkedNode = headLinkedNode;
            while (true){
                //判断头部是否有数据,头部为空直接添加进来
                if(Objects.isNull(tempLinkedNode.getNextNode())){
                    tempLinkedNode.nextNode= node;
                    break;
                }
                //如果头部指向的节点不为空,判断头部指向的节点的KEY 是否大于要添加进来节点的KEY
                //如果头部指向的节点KEY大于添加进来的节点的KEY,把头部的节点放入添加进来的节点指向的节点中,再把添加进来的节点放入头部节点
                else if (tempLinkedNode.getNextNode().key>node.getKey()) {
                    node.nextNode = tempLinkedNode.nextNode;
                    tempLinkedNode.nextNode = node;
                    break;
                }
                tempLinkedNode = tempLinkedNode.nextNode;
            }
        }

        /**
         * 添加节点到尾部
         * @param node
         */
        public void addLinkedNode(LinkedNode node){
            LinkedNode tempLinkedNode = headLinkedNode;
            while (true){
                //判断头部是否有数据,头部为空直接添加进来
                if(Objects.isNull(tempLinkedNode.getNextNode())){
                    tempLinkedNode.nextNode= node;
                    break;
                }
                tempLinkedNode = tempLinkedNode.nextNode;

            }
        }

        /**
         * 打印链表节点的数据
         */
        public void print() {
            LinkedNode temp = headLinkedNode.nextNode;
            while (temp != null) {
                System.out.println(temp.toString());
                temp = temp.nextNode;
            }
        }
    }

    private static class LinkedNode{
        private int key;
        private String value;
        private LinkedNode nextNode;

        public LinkedNode(int key, String value) {
            this.key = key;
            this.value = value;
        }

        public int getKey() {
            return key;
        }

        public void setKey(int key) {
            this.key = key;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public LinkedNode getNextNode() {
            return nextNode;
        }

        public void setNextNode(LinkedNode nextNode) {
            this.nextNode = nextNode;
        }

        @Override
        public String toString() {
            return "LinkedNode{" +
                    "key=" + key +
                    ", value='" + value + '\'' +
                    '}';
        }
    }
}

推荐文章

数据结构:哈希表《概念》 数据结构:哈希表 数据结构:链表《双链表》 数据结构:链表《单链表》 数据结构:链表《概念》

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
COM对象组件POST教程聊呗协议猴子分桃图片比例缩放ORACLE数据库个人发卡高并发http模型批量修改源码注册美团go语言适合写游戏吗医院信息管理系统内存tcp协议WMF图片转BMP易语言滑动验证码大漠插件二维码登录火山移动趣生活登录
最新评论