双向链表插入函数
发布时间:2023-09-25 05:38:42
双向链表是一种数据结构,它与普通链表相比,每个节点都有两个指针,分别指向前一个节点和后一个节点。双向链表插入函数的作用是在链表的指定位置插入一个新节点。
双向链表插入函数的实现可以分为以下几个步骤:
1. 首先,我们需要检查链表是否为空。如果链表为空,说明插入的节点将成为链表的 个节点,那么我们只需要将链表头指针指向插入的节点即可。
2. 如果链表不为空,我们需要遍历链表找到要插入的位置。我们可以使用一个指针来遍历链表,从链表头开始,一直遍历到链表尾,直到找到插入位置。
3. 一旦找到插入位置,我们需要创建一个新节点,并将新节点的数据域设置为要插入的数据。
4. 然后,我们需要更新链表中的指针。我们首先将新节点的前一节点指针指向插入位置的前一节点,然后将新节点的后一节点指针指向插入位置的节点。接下来,我们需要更新插入位置的前一节点的后一节点指针,将其指向新节点。最后,我们需要更新插入位置的节点的前一节点指针,将其指向新节点。
5. 最后,我们需要更新链表的长度。
以下是双向链表插入函数的实现代码:
class Node:
def __init__(self, data=None):
self.data = data
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
self.length = 0
def insert(self, index, data):
new_node = Node(data)
# 如果链表为空
if self.head is None:
self.head = new_node
self.length += 1
return
# 如果插入位置是链表头
if index == 0:
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
self.length += 1
return
# 如果插入位置不是链表头
curr_node = self.head
curr_index = 0
while curr_index < index:
if curr_node.next is None:
break
curr_node = curr_node.next
curr_index += 1
new_node.prev = curr_node.prev
new_node.next = curr_node
curr_node.prev.next = new_node
curr_node.prev = new_node
self.length += 1
这样,我们就完成了双向链表插入函数的实现。通过调用insert方法,我们可以在链表的指定位置插入一个新节点。
