带头双向循环链表(一)

今天我们来学习带头双向链表

带头双向循环链表的解释

带头双向链表顾名思义就是:

1、带了一个“头”在数据结构中的意思就是加了一个"哨兵位"。

2、这个链表是双向循环的链表即可以通过任意的节点访问它的上一个和下一个的节点也能通过链表的头直接访问到链表的尾部。

带头双向循环链表的实现

带头双向循环链表的要求和单项循环链表的要求一样:头插,尾插,头删,尾删,查找,打印,前置插入,定点删除,链表销毁等要求要实现。

一、链表的头插
思路解析:

               直接找到头结点的下一个,然后把创建的新节点和头结点连上去就行。

代码实现:
void LTPushFront(LTNode* phead, LTDateType x)
{
	assert(phead);
	LTNode* newnode = GreateLTNode(x);
	LTNode* first = phead->next;

	phead->next = newnode;
	newnode->next = first;
	newnode->prev = phead;
	first->prev = newnode;
}
二、链表的尾插
思路解析:

                直接使用prev的指针找到最后的节点插入并与头结点和倒数第二个节点连接上即可。

代码实现:
void LTPushBank(LTNode* phead, LTDateType x)
{
	LTNode* tail = phead->prev;
	LTNode* newnode = GreateLTNode(x);

	tail->next = newnode;
	newnode->prev = tail;
	newnode->next = phead;
	phead->prev = newnode;
}
三、链表的头删
思路解析:

                找到第一个和第二个节点直接把头结点和第二个节点直接连接起来最后free第一个节点即可。

代码实现:
void LTPopFront(LTNode* phead)
{
	assert(phead);
	assert(phead->next != phead);

	LTNode* cur = phead->next->next;
	LTNode* tail = phead->next;
	
	phead->next = cur;
	cur->prev = phead;
	free(tail);
	tail = NULL;
}
四、链表的尾删
思路解析:

                找到倒数第二个节点然后直接连接到头结点,free最后一个节点即可。

代码实现:
void LTPopBank(LTNode*phead)
	assert(phead);
	assert(phead->next != phead);
	LTNode* tail = phead->prev;
	LTNode* tailprev = tail->prev;

	free(tail);
	tailprev->next = phead;
	phead->prev = tailprev;

}

剩下的几个接口我们会在明天继续完成,如有错误还请大佬们敬请指出,谢谢大家的关注谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值