链接列表如何工作?链表初学者指南

本文详细介绍了链表作为一种线性数据结构的工作原理,包括节点的构成、链表的头部和尾部,以及如何在Java中创建、连接、追加、插入和删除节点。链表在编程中常用于实现浏览器历史、音乐播放列表等功能,理解链表有助于选择合适的数据结构。
摘要由CSDN通过智能技术生成

链表是一种线性数据结构,用于存储元素的集合。与数组不同,链表使用节点来存储未存储在连续内存位置的元素。

在本文中,您将了解链表是什么、它们如何工作以及如何构建链表。

虽然所讨论的概念并不特定于任何特定的编程语言,但本文将使用 Java 来演示如何以编程方式创建链表。

什么是链表?
链表是节点的集合,其中每个节点包含数据以及列表中下一个节点的内存地址。
在这里插入图片描述
具有三个节点的链表的图示
在这里,您可以看到节点的地址不一定是立即连续的。第一个节点的地址为200,第二个节点的地址为801,而不是您可能期望的201 。

那么节点是如何线性存储的呢?

即使节点不在连续内存中,节点也会通过链接线性存储。每个节点都有其后续节点的地址。这就是每个节点可以访问其后续节点的方式。

链表中的节点
节点是链表的构建块。毕竟,链表是节点的集合。
示例节点
链表中的节点由两部分组成:

data表示节点的值。
next这是对后续节点的引用。
链表中的头部和尾部
如前所述,链表是节点的集合。
在这里插入图片描述
显示头部和尾部的链表的插图
链表的第一个节点称为节点head。它是链表的起点。

最后一个节点称为tail节点。由于最后一个节点之后没有节点,所以最后一个节点始终指向null.

指针null不指向任何内存位置。

如何以编程方式创建链表
此时,您应该对链表的工作原理及其结构有基本的了解。让我们通过以下步骤创建一个链表:

创建节点。
连接节点。
追加节点。
插入节点。
删除节点。
如何在链表中创建节点
如您所知,一个节点由两部分组成:数据和下一个节点的地址。

在这里插入图片描述
单节点示意图
以下是创建一个名为的类的方法Node:

class Node {
   
    int data;
    Node next;
 
    Node(int data) {
   
        this.data = data;
        this.next = null;
    }
}                                     

该类Node表示链表中的一个节点,具有两个实例变量:data(保存存储在节点中的数据)和 next(保存对列表中下一个节点的引用)。

构造函数采用int参数数据来初始化数据变量,并默认将下一个变量设置为 null。

现在,您可以通过创建类的新实例来简单地创建节点并向它们添加数据Node:

// create nodes
Node node1 = new Node(11);
Node node2 = new Node(18);
Node node3 = new Node(24);

在上面的代码中,我们创建了三个节点:
在这里插入图片描述
显示我们用上面的代码创建的三个节点
如何链接链表中的节点
创建节点后,您必须将它们连接起来形成链表。

为此,您首先需要创建一个带有head节点的链表。

class LinkedList {
   

    Node head;

        LinkedList() {
   
        this.head = null;
    }

}

最初head节点被设置为null因为链表中还没有节点。

现在要在链表中将节点连接在一起,您可以首先将head节点设置为列表中的第一个节点,在本例中为node1。

head = node1;

然后使 next of node1point tonode2和 next of node2point to node3。那是:

node1.next = node2;
node2.next = node3;

在这里插入图片描述
显示节点链接的插图
您已成功创建链表并连接节点。

如何将节点附加到链表
追加节点意味着将节点添加到链表的末尾。添加节点时需要考虑两种情况:

追加到空链表。
附加到非空链表。
如何将节点附加到空链表
如果链表中没有节点,则它是一个空链表。要将节点附加到空链表,必须首先确保链表为空。您可以通过检查head节点是否为来执行此操作null。

如果head节点是null那么你可以简单地设置head为新节点:

if (head == null) {
   
    head = newNode;
}                                 

在这里插入图片描述
头节点为空
如何将节点附加到非空链表
如果链表中有一个或多个节点,则它是一个非空链表。
在这里插入图片描述
非空链表示意图
要将节点附加到非空链表,请将最后一个节点链接到新节点。

与数组不同,我们不能直接访问链表中的任何元素。我们必须从一个head节点遍历到另一个last节点。

为此,创建一个current指向头节点的临时指针(您可以称为指针)。

在这里插入图片描述
插图显示指向头节点的临时指针(当前)
接下来指向current它的next节点,直到next当前节点的 指向null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q shen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值