双向链表是一种常见的数据结构,它由多个节点组成,每个节点包含两个指针,分别指向前一个节点和后一个节点。双向链表可以支持两个方向的遍历,插入和删除操作也比较灵活。
双向链表的实现
1. 定义节点类
首先需要定义一个节点类,包含节点值和前后指针
class Nodeit__(self, val)
self.val = valeexte
2. 初始化链表
可以定义一个双向链表类,包含头节点和尾节点
kedListit__(self)e)e)ext = self.tail
self.tail.prev = self.head
3. 插入节点
在双向链表中,插入节点可以分为三种情况在头部插入、在尾部插入、在中间插入。以在尾部插入为例,先创建一个新节点,然后将其插入到尾节点前面
sert_tail(self, val)ewode = Node(val)ewode.prev = self.tail.prevewodeext = self.tailextewodeewode
4. 删除节点
e,然后将头节点指向下一个节点
def delete_head(self)ext == self.taileodeextextodeextodeext.prev = self.headode.val
5. 遍历链表
双向链表可以支持正向和反向遍历,以正向遍历为例
def traverse(self)odeextode != self.tailtode.val)odeodeext
6. 完整代码
class Nodeit__(self, val)
self.val = valeexte
kedListit__(self)e)e)ext = self.tail
self.tail.prev = self.head
sert_tail(self, val)ewode = Node(val)ewode.prev = self.tail.prevewodeext = self.tailextewodeewode
def delete_head(self)ext == self.taileodeextextodeextodeext.prev = self.headode.val
def traverse(self)odeextode != self.tailtode.val)odeodeext
通过上述代码,大家可以看到实现双向链表并不是很难,但是需要注意指针的指向和节点的插入和删除。双向链表可以支持两个方向的遍历,而且插入和删除操作也比较灵活,因此在实际应用中经常被使用。掌握双向链表的实现,可以提升数据结构和算法的能力。