数据结构--数据结构中的双链表结构(下)

  • 创建双链表之:尾删,所谓尾删就是删除上一个空间的尾部,:

尾删所对应的List.h,为

cs 复制代码
void LTPushBack(LTNode* phead);

他所对应的List.c,的代码为

cs 复制代码
void LTPushBack(LTNode* phead)

{
	//链表必须有效且链表不能为空
	assert(phead && phead->next != phead);

	LTNode* del = phead->prev;
	del->prev->next = phead;

	phead->prev = del->prev;
	//删除del节点
	free(del);
	del = NULL;
}
  • 有尾删必须有头删,它的原理和尾删其实都是一样的,只不过头删是删掉后一个空间的头部,

头删所对应的List.h,为

cs 复制代码
void LTPushFront(LTNode* phead);

他所对应的List.c,的代码为

cs 复制代码
void LTPushFront(LTNode* phead)
{
	assert(phead && phead->next != phead);

	LTNode* del = phead->next;

	phead->next = del->next;
	del->next->prev = phead;

	//删除del节点

	free(del);
	del = NULL;
}
  • 在pos位置之后插入数据:为什么要在pos之后插入数据呢?这是因为,现实的操作中,不只是头和尾的相关操作,它还有可能是,在某一个中间插入一个数据,这就需要算法来实现的,

在pos位置之后插入数据的List.h的代码:

cs 复制代码
//在pos位置之后插入数据

void LITNEST(LTNode* pos, LTDataType x);

在pos位置之后插入数据的List.c的代码:

cs 复制代码
void LITNEST(LTNode* pos, LTDataType x)
{
	assert(pos);

	LTNode* newnode = LTBuyNode(x);

	newnode->next = pos->next;
	newnode->prev = pos;

	pos->next->prev = newnode;
	pos->next = newnode;
}

它其实大致的思想和头删,尾删基本一致,无非就是位置改变了而已。

  • 有在pos上的插入就有在pos上的删除,删除pos的节点

删除pos的节点的List.h:

cs 复制代码
//删除pos的节点
void  LTTford(LTNode* pos);

void LTFind(LTNode* phead, LTDataType x);

删除pos的节点的List.c:

cs 复制代码
//在pos上删除
void  LTTford(LTNode* pos)
{
	assert(pos);

	pos->next->prev = pos->prev;

	pos->prev->next = pos->next;

	free(pos);
	pos = NULL;
}



 void LTFind(LTNode* phead, LTDataType x)
{
	assert(pos);

	LTNode* pcur = phead->next;
	while (pcur!=phead)
	{
		LTNode* next = pcur->next;
		free(pcur);
		pcur = NULL;
	}
	//此时pcur指向phead,而phead还没有被销毁
	free(phead);
	phead = NULL;
}
  • 对于,双链表的创建和实现,其实还有内容,但这是最核心的内容了。
相关推荐
叩码以求索1 小时前
浅谈:前序遍历反转法求解N叉树的后序遍历
算法
longxiaozhang62 小时前
C# Array类:数组其实没那么难
开发语言·c#
北风toto2 小时前
中缀、前缀、后缀表达式
算法·软件设计师
听取WA声一片(无恶意)2 小时前
CSP-J/CSP-S 深度优先搜索(DFS)完全讲义
c++·算法·深度优先
码流怪侠3 小时前
2026年8月GitHub热榜深度拆解:Agent Skills席卷开源圈,一个“技能包“收割5万星
算法·程序员·github
hold?fish:palm3 小时前
30 两两交换链表中的节点
数据结构·算法·链表
Nil2083 小时前
leetcode 98验证二叉搜索树
算法·leetcode·职场和发展
kkkkkkkkkk_Z3 小时前
学嵌入式和C语言编程数据结构|学习日记Day21:内核链表与队列学习
c语言·数据结构·学习
不正经学生3 小时前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
cxr8284 小时前
数学的本质:关系、模式与不变量的结构世界
人工智能·算法·机器学习