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.
  • 相关阅读:
    杭电1312--Red and Black(Dfs)
    杭电1102--Constructing Roads(简单并查集)
    杭电1969--Pie(二分法)
    最小生成树:HDU1863-畅通工程
    并查集:HDU1213-How Many Tables(并查集最简单的应用)
    并查集:HDU5326-Work(并查集比较简单灵活的运用)
    最小生成树:POJ1251-Jungle Roads(最小生成树的模板)
    图论:HDU2544-最短路(最全、最经典的最短路入门及小结)
    动态规划、记忆化搜索:HDU1978-How many ways
    记忆化搜索:POJ1088-滑雪(经典的记忆化搜索)
  • 原文地址:https://www.cnblogs.com/jssj/p/11644125.html
Copyright © 2011-2022 走看看