📅  最后修改于: 2023-12-03 15:42:21.675000             🧑  作者: Mango
该题目为门|门 IT 2006年度考试中的第40道题目,主要考查程序员在数据结构和算法方面的知识和应用能力。该题目要求实现一个双向链表,其中包含以下方法:
在实现该双向链表时,需要考虑以下几个方面:
以下是一个示例代码片段:
class Node:
def __init__(self, data):
self.prev = None
self.next = None
self.data = data
class DoublyLinkedList:
def __init__(self):
self.head = Node(None)
self.tail = Node(None)
self.head.next = self.tail
self.tail.prev = self.head
def add_before(self, node, data):
new_node = Node(data)
prev_node = node.prev
prev_node.next = new_node
new_node.prev = prev_node
new_node.next = node
node.prev = new_node
def add_after(self, node, data):
new_node = Node(data)
next_node = node.next
next_node.prev = new_node
new_node.next = next_node
new_node.prev = node
node.next = new_node
def remove(self, node):
prev_node = node.prev
next_node = node.next
prev_node.next = next_node
next_node.prev = prev_node
def print_all(self):
node = self.head.next
while node != self.tail:
print(node.data)
node = node.next
以上代码片段展示了如何实现一个双向链表,并包含了四个方法的实现。在使用该代码片段时,需要先创建一个DoublyLinkedList对象,然后通过该对象调用各个方法。如下所示:
dll = DoublyLinkedList()
node1 = dll.add_before(dll.tail, "node1")
node2 = dll.add_before(dll.tail, "node2")
dll.remove(node1)
dll.add_after(node2, "node3")
dll.print_all()
运行以上代码将会输出:
node2
node3