Java LinkedList

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

链表可分为单向链表和双向链表。
一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。


image

一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。


image

Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
与 ArrayList 相比,LinkedList 的增加和删除对操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :

频繁访问列表中的某一个元素。
只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

你需要通过循环迭代来访问列表中的某些元素。
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
更多请查看 LinkedList--api

模拟实现:

1、单链表:

//定义节点
    static class Node<T> {
        public T value;//数据域
        public Node next;//指针域

        public Node(T value, Node next) {
            this.value = value;
            this.next = next;
        }
    }
    //打印单链表
    public static void soutNode(Node node) {
        System.out.println("node.value: " + node.value);
        if (node.next != null) {
            soutNode(node.next);
        }
    }
//打印
//模拟实现单链表
        Node node3 = new Node("node_3", null);
        Node node2 = new Node("node_2", node3);
        Node node1 = new Node("node-1", node2);
        Node head = new Node("head", node1);
        soutNode(head);

打印结果:

node.value: head
node.value: node-1
node.value: node_2
node.value: node_3

1.1、插入和删除节点

//指定位置插入节点
Node node2_3 = new Node("newNode2_3",node3);
node2.next = node2_3;
//soutNode(newHead);
//删除某个指定节点,比如删除node2
node1.next = node2_3;
soutNode(newHead);

1.2、单项链表的反转

原顺序是:head、node-1、node-2、node-3

算法:
//链表反转-->head
System.out.println("开始反转>>>>>>>>>");
Node preNode = head;
Node currentNode = head;
Node tempNode;

while (currentNode != null){
     tempNode = currentNode.next;//临存

     currentNode.next = preNode;//指针下移
     preNode = currentNode;

      currentNode = tempNode;//启用临时数据
}

head.next = null;//原头结点next置空

反转后为:node-3、node-2、node-1、head
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容