📌  相关文章
📜  删除双向链表中的节点(1)

📅  最后修改于: 2023-12-03 15:22:42.925000             🧑  作者: Mango

删除双向链表中的节点

在双向链表上删除节点涉及到修改前驱指针和后继指针的操作,因此需要考虑以下几种情况:

  • 待删除节点是头节点或尾节点
  • 待删除节点是中间节点

具体实现的细节与语言有关,下面我们以 Python 语言为例进行介绍。

首先我们需要定义双向链表的数据结构:

class Node:
    def __init__(self, val):
        self.val = val
        self.next = None
        self.prev = None

class DoublyLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None

然后我们实现一个 delete 方法用于删除指定节点:

class DoublyLinkedList:
    # ...

    def delete(self, node):
        if node == self.head:
            self.head = node.next
        if node == self.tail:
            self.tail = node.prev
        if node.prev:
            node.prev.next = node.next
        if node.next:
            node.next.prev = node.prev
        node.next = None
        node.prev = None

该方法分别处理了待删除节点为头节点和尾节点的情况,然后通过修改前驱和后继节点的指针来从双向链表中删除该节点。

使用示例:

# 创建一个双向链表
dll = DoublyLinkedList()

# 添加四个节点
n1 = Node(1)
n2 = Node(2)
n3 = Node(3)
n4 = Node(4)
dll.head = n1
n1.next = n2
n2.prev = n1
n2.next = n3
n3.prev = n2
n3.next = n4
n4.prev = n3
dll.tail = n4

# 删除中间节点
dll.delete(n3)

# 打印链表中的所有节点
node = dll.head
while node:
    print(node.val)
    node = node.next

输出结果:

1
2
4

以上就是如何在 Python 中删除双向链表中的节点。