链表及索引

链表作为一种数据结构,其结点在内存中可离散分布,增删元素无需移动元素,提供高效操作。但访问特定结点需遍历整个链表,效率较低。本文探讨了如何创建链表、修改元素,以及链表的新增和删除操作。

链表中数据单位的名称叫做“结点”,结点和结点的分布在内存中可以是离散的。

相对于数组来说,链表添加和删除元素都不需要挪动多余的元素

  • 高效的增删

    明确插入/删除的目标位置,只需要改变目标结点及其前驱/后继结点的指针指向

  • 麻烦的访问

    试图读取某一个特定的链表结点时,必须遍历整个链表来查找它

    在数组中直接访问索引可以做到一步到位

img

{

 // 数据域`    

val: 1,

 // 指针域,指向下一个结点`    

next: {      

val:2,        

next: ...   

} } 

创建链表

function ListNode(val) {  

this.val = val;  

this.next = null;

}

const node = new ListNode(1)

node.next = new ListNode(2)

修改元素

新增

假如要把 node3 添加到 node2 所在链表的尾部,直接把 node2 的 next 指针指向 node3 即可

插入

在这里插入图片描述

// 如果目标结点本来不存在,那么记得手动创建 

const node3 = new 

ListNode(3)      

// 把node3的 next 指针指向 node2(即 node1.next)

node3.next = node1.next 

// 把node1的 next 指针指向 node3 

node1.next = node3

删除

要想遍历不到 node3,直接让它的前驱结点 node1 的 next 指针跳过它、指向 node3 的后继即可

node1.next = node3.next

链表的插入/删除效率较高,而访问效率较低;

数组的访问效率较高,而插入效率较低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值