具有头指针的双链表插入删除一个元素的指针变化
时间: 2024-12-02 08:19:49 浏览: 0
双向链表插入删除基本应用介绍
5星 · 资源好评率100%
在具有头指针的双链表中,插入和删除操作会涉及到节点指针的变化。这里简述一下:
**插入操作:**
1. **在头部插入:**新节点成为新的头节点,它会指向原来的头节点,而原来的头节点的`next`指针则指向新节点。如果列表为空,则新节点同时是`prev`指针的指针。
```
void insertAtHead(Node* newNode) {
newNode->prev = NULL;
newNode->next = head;
if (head != NULL)
head->prev = newNode;
head = newNode;
}
```
2. **在中间插入:**找到目标位置的新前驱节点,然后更新新旧节点的`next`和`prev`指针。
```
void insertAfter(Node* prevNode, Node* newNode) {
newNode->prev = prevNode;
newNode->next = prevNode->next;
if (prevNode->next != NULL)
prevNode->next->prev = newNode;
prevNode->next = newNode;
}
```
**删除操作:**
1. **删除头节点:**直接修改头节点的`next`指针,将下一个节点设为新的头,并处理特殊情况(如列表仅有一个元素)。
```
void deleteNode(Node* nodeToBeDeleted) {
if (head == nodeToBeDeleted) {
head = head->next;
if (head != NULL)
head->prev = NULL;
} else {
Node* temp = head;
while (temp->next != nodeToBeDeleted)
temp = temp->next;
temp->next = nodeToBeDeleted->next;
if (nodeToBeDeleted->next != NULL)
nodeToBeDeleted->next->prev = temp;
}
}
```
阅读全文