欢迎访问宙启技术站
智能推送

双向链表插入函数

发布时间: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方法,我们可以在链表的指定位置插入一个新节点。