Java中链表(Linked list)用法(单链表,双链表)

Java中链表的用法

  • 1.链表的概念
  • 2.链表的操作
    • 2.1 单链表的操作
      • 2.1.1 插入节点
      • 2.1.2 删除节点
      • 2.1.3 单链表的缺点
    • 2.2 双链表的操作
      • 2.2.1 插入节点
      • 2.2.2 删除节点
  • 3.Java中链表的使用
    • 3.1 Java中链表的操作
    • 3.2 Java实现链表

1.链表的概念

  • 链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放 数据元素。
  • 链表中每一个元素成为 “结点” , 每一个结点都是由数据域指针域组成的, 每个结点中的指针域指向下一 个结点
  • Head 是 “头指针” , 表示链表的开始, 用来指向第一个结点, 而最后一个指针的指针域NULL( 空地址 ) ,表示链表的结束。
  • 可以看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的 地址。 实际上,链表中的每个结点可以用若干个数据和若干个指针。

单链表:结点中只有一个指针的链表称为单链表,这是最简单的链表结构。
其节点由两部分构成:

  • data域:数据域,用来存储元素数据
  • next域:用于指向下一节点
    单链表

双链表:有前后两个指针的链表。
其节点由三部分构成:

  • data域:数据域,用来存储元素数据
  • next域:用于指向后一节点
  • front域:用于指向前一节点
    双链表

2.链表的操作

2.1 单链表的操作

2.1.1 插入节点

单链表插入节点主要分两步,顺序不可替换:

1.先将x->next指向A2
2.再将A1->next指向x
Java中链表(Linked list)用法(单链表,双链表)_第1张图片

2.1.2 删除节点

删除节点其实只需要一步

A1->next 指向A3就行,此时A2会被自动回收
Java中链表(Linked list)用法(单链表,双链表)_第2张图片

2.1.3 单链表的缺点

通过对单链表的分析,可以看出单链表有如下缺点:

  1. 单链表的查找方法只能是一个方向
  2. 单链表不能自我删除,需要靠上一节点进行辅助操作。

2.2 双链表的操作

2.2.1 插入节点

双链表的操作会比单链表复杂很多,顺序也可以是2143,其他的可以自己想一想,只要不断就行。

  1. x->next指向A2
  2. A1->next指向x
  3. x->prev指向A1
  4. A2->prev指向x
    Java中链表(Linked list)用法(单链表,双链表)_第3张图片

2.2.2 删除节点

删除节点容易很多,先后顺序也不是很重要

A3->prev指向A1
A1->next指向A3
Java中链表(Linked list)用法(单链表,双链表)_第4张图片

3.Java中链表的使用

以下内容参考Java LinkedList。更详细可以去这里看。
现在来讲Java要用到链表应该怎么写。

ArrayList和LinkedList都实现了链表,两者的区别在于与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

链表用LinkedList较多。

3.1 Java中链表的操作

LinkedList 类位于 java.util 包中,使用前需要引入它,语法格式如下:

// 引入 LinkedList 类
import java.util.LinkedList; 

LinkedList<E> list = new LinkedList<E>();   // 普通创建方法
或者
LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表

创建一个简单的链表实例:

import java.util.LinkedList;

public class RunoobTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites);
    }
}

以上实例,执行输出结果为:

[Google, Runoob, Taobao, Weibo]

其他操作可参考这个表格

方法 描述
addFirst() 在表头增加一个元素
addLast() 在表尾增加一个元素
removeFirst() 从表头移除一个元素
removeLast() 从表尾移除一个元素
getFirst() 获得表头的元素
getLast() 获得表尾的元素

3.2 Java实现链表

想看Java中链表是如何实现以及基本的操作可以看这个博客,讲的很清楚,我就不在这里贴代码了。java ListNode 链表

你可能感兴趣的:(Java,日常学习笔记,算法,java,数据结构,链表,list)