双向链表是一种数据结构,它允许在链表的任何位置高效地插入和删除节点。与单向链表相比,双向链表中的每个节点不仅存储了指向下一个节点的指针,还存储了一个指向前一个节点的指针。
定义双向链表节点
双向链表的基本组成是节点,每个节点包含三个部分:数据、指向下一个节点的指针和指向前一个节点的指针。
class Node { constructor(data) { this.data = data; this.next = null; this.prev = null; } }
创建双向链表类
接下来,我们创建一个双向链表类,该类将包含对链表进行操作的方法。
class DoublyLinkedList { constructor() { this.head = null; this.tail = null; this.size = 0; } }
在双向链表末尾添加元素
在双向链表中添加元素到末尾是最常见的操作之一。这个方法首先检查链表是否为空,然后决定如何添加新元素。
-- -------------------- ---- ------- -------------- - ----- ------- - --- ----------- -- ------------ - -- ------ --------- - -------- --------- - -------- - ---- - ------------ - ---------- -------------- - -------- --------- - -------- - ------------ -
在双向链表开头添加元素
除了在链表末尾添加元素外,还可以在开头添加元素。这同样是一个常见的操作,用于快速增加元素。
-- -------------------- ---- ------- -------------------- - ----- ------- - --- ----------- -- ------------ - -- ------ --------- - -------- --------- - -------- - ---- - ------------ - ---------- -------------- - -------- --------- - -------- - ------------ -
在指定位置添加元素
在双向链表中,还可以根据索引值来添加新的节点。需要注意的是,这个操作需要遍历链表直到找到指定位置。
-- -------------------- ---- ------- --------------- ----- - -- ------ - - -- ----- - ---------- ------- --- ------- - --- ----------- -- ------ --- -- - -------------------------- - ---- -- ------ --- ---------- - -------------------- - ---- - --- ----------- - ---------- --- ---- - - -- - - ----- - -- ---- - ----------- - ----------------- - ------------ - ----------------- ------------ - ------------ --------------------- - -------- ---------------- - -------- ------------ - -
删除双向链表中的元素
删除链表中的元素同样分为几种情况:删除头部节点、删除尾部节点以及删除中间的节点。
-- -------------------- ---- ------- --------------- - -- ------ - - -- ----- -- ---------- ------- --- ----------- - ---------- -- ------ --- -- - -- ----- --------- - --------------- -- ----------- -------------- - ----- ---- --------- - ----- - ---- -- ------ --- --------- - -- - -- ----- --------- - --------------- -------------- - ----- - ---- - --- ---- - - -- - - ------ ---- - ----------- - ----------------- - --------------------- - ----------------- --------------------- - ----------------- - ------------ -
查找双向链表中的元素
查找链表中的元素也是一个基本的操作。可以通过遍历链表直到找到目标值或者遍历到链表末尾。
-- -------------------- ---- ------- ---------- - --- ----------- - ---------- ----- ------------- - -- ----------------- --- ----- - ------ ------------ - ----------- - ----------------- - ------ ----- -
遍历双向链表
遍历双向链表可以从前向后遍历,也可以从后向前遍历。
-- -------------------- ---- ------- ------------------------- - --- ----------- - ---------- ----- ------------- - --------------------------- ----------- - ----------------- - - -------------------------- - --- ----------- - ---------- ----- ------------- - --------------------------- ----------- - ----------------- - -
以上就是关于双向链表的一些基础操作,通过这些方法我们可以实现对双向链表的各种操作,从而满足不同的应用场景。