zoukankan      html  css  js  c++  java
  • 数据结构学习(一)单链表

    转行不易,没有系统的学习数据结构,缺乏认知,现在开始从零学起。

    总的来说,就是每个节点包含当前节点的值,并指向下一个节点,彼此关联。笔者java出身,从java的角度说,像是多层对象的递归赋值,因此,基于此逻辑,实现我们的单链表构造和基本的头尾插入、指定位置插入、指定位置删除。

    废话不多说,直接亮代码:

    package singlelinkedList;
    
    /**
     * Message: 单链表实现
     * <p>
     * Content: 包含链表构造,头尾插入,指定位置插入,指定位置删除
     *
     * @author lucky
     * create on 2018/07/31
     */
    public class Node {
        public int data;
        public Node next;
        public Node(){}
        public Node(int value){
            this.data = value;
        }
    
        /**
         * 递归打印链表
         * @param node
         */
        public static void ScanNode(Node node){
            if (node.next != null){
                System.out.println(node.data);
                ScanNode(node.next);
            }else {
                System.out.println(node.data);
            }
        }
    
        /**
         * 尾插入
         * 增加一个node,遍历需要插入的node的所有节点,
         * 找出下一个节点为空的,默认为尾节点,插入新值
         *
         * @return
         */
        public static Node addNode(Node source,Node newNode){
            Node temp = source;
            while (temp.next != null)
            {
                temp = temp.next;
            }
    
    
            temp.next = newNode;
    
            return source;
    
        }
    
    //    /**
    //     * 头插入
    //     * 直接将新节点的下一节点指向已定义的节点即可
    //     *
    //     * @return
    //     */
    //    public static Node addNode(Node source,Node newNode){
    //
    //        newNode.next = source;
    //
    //        return newNode;
    //
    //    }
    
    
    
        /**
         * 插入节点到指定位置,需要将其余位置的节点后移
         *
         * @param
         */
        public static Node insertNodeByIndex(Node source,int index,Node newNode){
    
            Node temp = source;
            int i = 0;
            while (i < index){
                if(temp.next == null)
                {
                    temp.next = newNode;
                    return temp;
                }
                else {
                    temp = temp.next;
                    i++;
                }
            }
    
            newNode.next = temp.next;
    
            temp.next = newNode;
    
            return temp;
        }
        
        public static Node delNodeByIndex(Node source,int index){
    
            Node temp = source;
    
            int i = 0;
            while (i < index){
                if(temp.next == null)
                {
                    return temp;
                }
                else {
                    temp = temp.next;
                    i++;
                }
            }
    
            temp.next = temp.next.next;
    
            return temp;
        }
    
        public static void main(String[] args){
            int[] arrays = {2,3,4,5,7,6,1};
            Node node = null;
            for (int i = 0; i < arrays.length;i++) {
                if(i==0){
                    node = new Node(arrays[i]);
                }
                else {
                    Node newNode = new Node(arrays[i]);
                    node = addNode(node,newNode);
                }
            }
    
            ScanNode(node);
    
            System.out.println("===========下一个开始=============");
    
            insertNodeByIndex(node,3,new Node(11));
    
            ScanNode(node);
    
            System.out.println("===========下一个开始=============");
    
            delNodeByIndex(node,3);
    
            ScanNode(node);
        }
    
    }
    

      

    一套思考加实现,一个小时就过去了,后面将尝试几个与单链表相关的算法实现,敬请关注~

    每天一小时,进步一丢丢!

  • 相关阅读:
    线程queue
    定时器
    event模拟数据库链接
    最速下降法(梯度下降法)
    神经网络中的反向传播算法
    批量学习和在线学习的区别
    LMS算法
    粒子群算法
    遗传算法
    logistic回归
  • 原文地址:https://www.cnblogs.com/mowenlucky/p/9398253.html
Copyright © 2011-2022 走看看