zoukankan      html  css  js  c++  java
  • 《Java数据结构》Java链表结构(单向链表,双向链表)

    单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;

    单向链表:

    /**
     * 单向链表
     */
    public class ListNode {
        Integer val;
        ListNode next; //下一个节点
    
        public ListNode(Integer x) { val = x; }
    
    }
    /**
     * 创建一个单向链表结构
     * 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8  -> 9
     */
    public class ListDemo {
        public static void main(String[] args) {
            //创建链表
            ListNode listNodeTmp = new ListNode(-1);
            ListNode listNodeStart = listNodeTmp;
            for (int i = 1; i < 10; i++) {
                ListNode listNode = new ListNode(i);
                listNodeTmp.next = listNode;
                listNodeTmp = listNode;
            }
    
            //打印链表
            ListNode listNodeQuery = listNodeStart.next;  //listNodeQuery相当于指针,指向哪个节点
            StringBuilder stringBuilder = null;
            while(listNodeQuery !=null){  //指向位置是否为空
                if(stringBuilder == null){
                    stringBuilder = new StringBuilder();
                    stringBuilder.append(listNodeQuery.val);
                }else{
                    stringBuilder.append(" -> "+ listNodeQuery.val);
                }
                listNodeQuery = listNodeQuery.next;    // 指向下一个节点
            }
            System.out.println(stringBuilder.toString());
        }
    }

    运行结果:

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

    双向链表:

    public class DoubleListNode {
        Integer val;
        DoubleListNode next; //下一个节点
        DoubleListNode pro;  //上一个节点
    
        public DoubleListNode(Integer x) { val = x; }
    }
    /**
     * 创建一个双向向链表结构(1 指向 2 的同时2 也指向 1)
     * 1 <-> 2 <-> 3 <-> 4 <-> 5 <-> 6
     */
    public class DoubleListDemo {
        public static void main(String[] args) {
            //创建链表
            DoubleListNode doubleListNodeTmp = new DoubleListNode(-1);
            DoubleListNode doubleListNodeStart = doubleListNodeTmp;
            for (int i = 1; i < 10; i++) {
                DoubleListNode doubleListNode = new DoubleListNode(i);
                doubleListNodeTmp.next = doubleListNode;
                doubleListNode.pro = doubleListNodeTmp;
                doubleListNodeTmp = doubleListNode;
            }
    
            DoubleListNode doubleListNodeQuery = doubleListNodeStart.next.next.next;   //指向3的位置
            //获取自身
            System.out.println("节点自身:"+doubleListNodeQuery.val);
            //获取上一个节点.
            System.out.println("上一个节点:"+doubleListNodeQuery.pro.val);
            //获取下一个节点.
            System.out.println("下一个节点:"+doubleListNodeQuery.next.val);
        }
    }

    运行结果:

    This moment will nap, you will have a dream; But this moment study,you will interpret a dream.
  • 相关阅读:
    201521044091《Java程序设计》第7周学习总结
    201521044091《java程序设计》第四次总结
    201521044091 《java程序设计》第八周学习总结
    201521044091 《Java程序设计》第5周学习总结
    201521044091 《Java程序设计》第2周学习总结
    201521044091 《Java程序设计》第3周学习总结
    MySQL设置字符集CHARACTER SET
    Create My MySQL configuration by Percona
    How to use jQuery to manipulate Cookies
    How to use OpenXml to import xml data to Sql server
  • 原文地址:https://www.cnblogs.com/jssj/p/11644125.html
Copyright © 2011-2022 走看看