双向链表的创建与相关基本函数

双向链表的创建与相关基本函数

之前我们已经讲了单向链表
https://blog.csdn.net/frc8011_zzr/article/details/111657732
在单向链表的基础上我们给每一个节点多加一个prev指针指向上一个节点就能实现双向链表了

1)在创建结构体时加多一个prev指针,用于指向上一个节点

struct Node {
	int data;
	Node* prev;
	Node* next;
};

双向链表的基本结构
next指针指向下一个节点,prev指针指向上一个节点

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;
	}
}

调整前后next和prev指针指向的地址
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++中的基本实现,限笔者水平有限,敬请各读者指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值