双向链表插入结点
时间: 2023-06-28 10:08:47 浏览: 64
双向链表是一种链式数据结构,每个结点除了存储数据之外还有两个指针,一个指向前面的结点,一个指向后面的结点。插入结点的过程可以分为以下几个步骤:
1. 创建一个新结点,并为其分配内存空间。
2. 给新结点赋值。
3. 将新结点的前驱指针指向当前结点的前驱结点,将新结点的后继指针指向当前结点。
4. 将当前结点的前驱结点的后继指针指向新结点,将当前结点的前驱指针指向新结点。
下面是一个C++实现的双向链表插入结点的示例代码:
```cpp
#include <iostream>
using namespace std;
struct Node {
int data;
Node* prev;
Node* next;
};
int main() {
Node* head = NULL;
// 创建第一个结点
Node* first = new Node();
first->data = 1;
first->prev = NULL;
first->next = NULL;
head = first;
// 在第一个结点后插入一个新结点
Node* second = new Node();
second->data = 2;
second->prev = first;
second->next = NULL;
first->next = second;
// 在第二个结点前插入一个新结点
Node* third = new Node();
third->data = 3;
third->prev = second->prev;
third->next = second;
second->prev->next = third;
second->prev = third;
// 输出链表中所有结点的值
Node* p = head;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
return 0;
}
```
在这个示例中,我们首先创建了一个双向链表的头结点,然后依次插入了两个新结点。在第二个结点后面插入新结点时,我们直接使用第二个结点的前驱指针作为新结点的前驱指针,使用第二个结点作为新结点的后继指针即可。在第二个结点前面插入新结点时,我们需要注意修改第二个结点前驱结点的后继指针和第二个结点的前驱指针。最后,我们遍历整个链表,输出每个结点的值。