📌  相关文章
📜  数据结构示例-双向链接开头删除节点(1)

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

数据结构示例-双向链接开头删除节点

双向链表是一种常用的数据结构,它由一组节点组成,每个节点包含一个指向前驱节点和一个指向后继节点的指针。与单向链表不同,每个节点都可以从前向后和从后向前遍历。

对于双向链表的删除操作,有两种情况:删除头节点和删除非头节点。以下是一个示例代码片段,实现了双向链表开头删除节点的功能。

删除头节点
public void deleteHeadNode() {
    if (head.next == null) {
        return;
    }
    head.next.prev = null;
    head.next = head.next.next;
}

对于双向链表的头节点,我们需要将它的后继节点作为新的头节点,同时将新的头节点的前驱指针置为 null。如果链表为空,则不做任何操作。

删除非头节点
public void deleteNode(Node node) {
    if (node == null) {
        return;
    }
    if (node.prev != null) {
        node.prev.next = node.next;
    } else {
        head = node.next;
    }
    if (node.next != null) {
        node.next.prev = node.prev;
    }
}

删除非头节点需要注意两个指针的处理:前驱节点的后继指针和后继节点的前驱指针。如果待删除的节点有前驱节点,我们只需要将其前驱节点的后继指针指向它的后继节点即可。否则,如果待删除的节点是头节点,我们需要将头指针指向它的后继节点。最后,将待删除节点的后继节点的前驱指针指向它的前驱节点即可。

以上就是双向链表开头删除节点的实现。当然,双向链表还有很多其他的操作,比如插入节点、查找节点、反转链表等等,都可以通过类似的方式进行实现。