📅  最后修改于: 2023-12-03 15:28:39.438000             🧑  作者: Mango
这是一道GATE CS模拟题,考察的是计算机科学的基础知识。以下是题目的要求和提示:
实现一个双向链表,并实现以下操作:
双向链表是一种常见的数据结构,每个节点都有一个前驱节点和一个后继节点,可以在常数时间内进行插入、删除和查找操作。通常情况下,我们需要实现节点类和链表类两个类,其中节点类包含数据和前后指针,链表类实现插入、删除和查找操作。
以下是实现双向链表的参考代码片段,其中包含了节点类和链表类:
class Node:
def __init__(self, data):
self.prev = None
self.data = data
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
def insert(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
curr = self.head
while curr.next:
curr = curr.next
new_node.prev = curr
curr.next = new_node
def delete(self, data):
curr = self.head
while curr:
if curr.data == data:
if curr.prev is None and curr.next is None:
self.head = None
elif curr.prev is None and curr.next is not None:
self.head = curr.next
curr.next.prev = None
elif curr.prev is not None and curr.next is None:
curr.prev.next = None
else:
curr.prev.next = curr.next
curr.next.prev = curr.prev
del curr
return
curr = curr.next
def search(self, data):
curr = self.head
while curr:
if curr.data == data:
return True
curr = curr.next
return False
上面的代码片段包含了一个节点类 Node
和一个链表类 DoublyLinkedList
。节点类有三个属性: prev
表示前驱节点, data
表示数据, next
表示后继节点。链表类有一个属性 head
表示链表头节点。它有三个方法,分别是 insert
插入一个元素、 delete
删除一个元素、 search
查找一个元素。
其中插入操作比较简单,只需要迭代到链表的尾部,然后在尾部插入一个新的节点即可。
删除操作需要分别考虑四种情况:
查找操作也比较简单,只需要迭代整个链表,找到第一个数据符合要求的节点即可。
以上就是一个简单的双向链表的实现。注意,这只是一个简单的参考实现,实际上可能还需要做一些调整和优化,比如处理异常情况等。