📅  最后修改于: 2023-12-03 15:22:34.811000             🧑  作者: Mango
双向链接的链表是一种数据结构,它允许在链表中的每个节点中存储指向其前驱和后继节点的链接。这个数据结构在现实生活中有许多应用,例如:
当我们在浏览器中打开网页时,经常需要按照一定的顺序浏览网页。如果我们希望回到前一页或者前几页,可以通过浏览器的“后退”功能来实现。这个功能本质上就是一个双向链接的链表,它允许我们在浏览时按照一定的顺序前进和后退。
在这个链表中,每个节点表示一个网页,包含了指向前一页和后一页的链接。我们可以把这些节点按照打开的顺序串起来,形成一个“链表”。当我们点击“后退”时,浏览器会跳转到链表中的前一个节点,当我们点击“前进”时,浏览器会跳转到链表中的下一个节点。
与浏览器类似,在音乐播放器中也需要实现类似的“前进”和“后退”功能。当我们听一首歌曲时,很可能会想要跳到下一首或者上一首歌曲。这个功能可以通过一个双向链接的链表来实现。
在这个链表中,每个节点表示一首歌曲,包含了指向前一首和后一首歌曲的链接。我们可以把这些节点按照播放的顺序串起来,形成一个“链表”。当我们点击“下一首”时,音乐播放器会跳转到链表中的下一个节点,当我们点击“上一首”时,音乐播放器会跳转到链表中的前一个节点。
下面是一个使用Python实现双向链表的代码示例:
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
return
curr_node = self.head
while curr_node.next is not None:
curr_node = curr_node.next
curr_node.next = new_node
new_node.prev = curr_node
def print_forward(self):
curr_node = self.head
while curr_node is not None:
print(curr_node.data)
curr_node = curr_node.next
def print_backward(self):
curr_node = self.head
while curr_node.next is not None:
curr_node = curr_node.next
while curr_node is not None:
print(curr_node.data)
curr_node = curr_node.prev
# 示例
if __name__ == '__main__':
linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
linked_list.print_forward() # 输出:1 2 3
linked_list.print_backward() # 输出:3 2 1
在这个代码示例中,我们定义了一个Node
类和一个LinkedList
类。Node
类表示链表中的每个节点,包含了节点的数据和指向前驱和后继节点的链接。LinkedList
类表示一个双向链接的链表,包含了指向第一个节点的链接。
我们还实现了append
方法来向链表中添加节点,以及print_forward
和print_backward
方法来分别打印出链表中的每个节点(从前往后和从后往前)。最后,我们在if __name__ == '__main__'
中测试了这个链表的基本功能。