美文网首页Java数据结构和算法
数据结构之 单向链表

数据结构之 单向链表

作者: 测试员 | 来源:发表于2019-08-22 11:13 被阅读0次

    描述

    链表是有序的列表,但是它在内存中是存储如下


    单向链表.png

    1)链表是以节点的方式来存储,是链式存储
    2)每个节点包含 data 域, next 域:指向下一个节点.
    3)如图:发现链表的各个节点不一定是连续存储.
    4)链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定

    代码实现

        package com.yuan.common.queue;
        
        /**
        * @author Yuan-9826
        */
        public class SingleLinkedList {
        
            private HeroNode head = new HeroNode(0, "");
        
            /**
            * 按照添加顺序增加一个节点
            *
            * @param node
            */
            public void add(HeroNode node) {
                //头结点不能动
                HeroNode temp = head;
                //一直循环直到找到尾部节点做接下来的操作
                while (temp.next != null) {
                    temp = temp.next;
                }
                //找到尾部节点时 赋值
                temp.next = node;
            }
        
            /**
            * 按照头编号顺序增加一个节点
            *
            * @param node
            */
            public void addByHead(HeroNode node) {
                if (node.head == 0 || node.head <= 0) {
                    throw new RuntimeException("数据不合法");
                }
                HeroNode temp = head;
                //头结点不能动
                boolean flag = false;
                while (true) {
                    if (temp.next == null) {
                        //说明已经在最后面了
                        temp.next = node;
                        break;
                    }
                    if (temp.next.head > node.head) {
                        //位置找到就在temp后面插入
                        node.next = temp.next;
                        temp.next = node;
                        break;
        
                    } else if (temp.next.head == node.head) {
                        break;
                    }
                    temp = temp.next;
                }
        
            }
        
            /**
            * 展示所有节点
            */
            public void show() {
                //头结点不能动
                HeroNode temp = head;
                //一直循环直到找到尾部节点
                while (temp.next != null) {
                    //打印出下一个指向的节点
                    System.out.println(temp.next);
                    temp = temp.next;
                }
            }
        
            /**
            * 更新或增加一个节点(如果该节点存在)
            *
            * @param newNode
            */
            public void update(HeroNode newNode) {
                HeroNode temp = head;
                while (temp.next != null) {
                    temp = temp.next;
                    if (newNode.head == temp.head) {
                        temp.data = newNode.data;
                        return;
                    }
                }
                addByHead(newNode);
            }
        
            /**
            * 删除一个节点
            *
            * @param nodeHead 节点编号
            */
            public void delete(int nodeHead) {
                HeroNode temp = head;
                while (temp != null&&null != temp.next) {
                    if (temp.next.head == nodeHead) {
                        temp.next = temp.next.next;
                        return;
                    }
                    temp = temp.next;
                }
            }
        }
        
        class HeroNode {
            public int head;
            public String data;
            public HeroNode next;
        
            public HeroNode(int head, String data) {
                this.head = head;
                this.data = data;
            }
        
            @Override
            public String toString() {
                return "[" + "head=" + head + ", data='" + data + ']';
            }
        }

    相关文章

      网友评论

        本文标题:数据结构之 单向链表

        本文链接:https://www.haomeiwen.com/subject/bpigsctx.html