双向链表的创建与相关基本函数
之前我们已经讲了单向链表
https://blog.csdn.net/frc8011_zzr/article/details/111657732
在单向链表的基础上我们给每一个节点多加一个prev指针指向上一个节点就能实现双向链表了
1)在创建结构体时加多一个prev指针,用于指向上一个节点
struct Node {
int data;
Node* prev;
Node* next;
};
双向链表的基本结构
2)插入新的节点时,要将next和prev的指向明确,以构成一个完整的双向链表
//在d的后面插入数据d1
void List::insert(const int& d, const int& d1) {
Node* p = head;
int i = 0;
//找到第d个node用p做标记
while(i<=d){
p = p->next;
i++;
}
//尾部插入
if (d == length()) {
Node* q;//新建一个节点q包含data,next,prev
q->data = d1;//把d1赋值q的data
q->prev = p;//q的prev指针指向上一个节点p
p->next = q;//p的next指针指向新建节点q
}
//中间插入
if (d < length()) {
Node* q;//新建一个节点q
Node* o=p->next;
q->data = d1;//赋值
q->prev = p;//新建节点q的prev指针指向第d个节点p
p->next = q;//第d个节点p的next指针指向新建节点q
o->prev = q;
q ->next= o;
}
}
3)删除节点时,只需要把使其两端的节点跨过他本身连接在一起
void List::cancel(const int&d) {
Node* p = head;
int i = 0;
//找到第d-1个node
while (i < d) {
p = p->next;
i++;
}
Node* q = p->next;//第d个Node
//尾部删除
if (d == length()) {
p->next=NULL;
}
//中间删除
if (d < length()) {
p->next = q->next;
p = q->next;
p->prev = q->prev;
}
delete q;
}
以上就是双向链表在C++中的基本实现,限笔者水平有限,敬请各读者指正