前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >单链表进阶

单链表进阶

作者头像
用户11367247
发布2024-11-20 14:45:58
发布2024-11-20 14:45:58
3700
代码可运行
举报
文章被收录于专栏:CodeCode
运行总次数:0
代码可运行

之前已经介绍过单链表及其一些简单的功能

这次来简单介绍单链表一些的其他接口

1.在指定位置之前插入数据

具体原码,三个参数,phead是链表的指针,pos是节点的地址,x是需要插入的数据。

pos不能为空指针,因为pos为空指针我们就无法插入了,其次是phead和*phead也不能是空指针,*phead是空链表就无法从其中一个链表之前插入数据了。然后通过BuyNode得到要插入的数据的地址,用tmp来接收,然后考虑如果pos 是头结点的话,直接让pos的next等于链表地址,然后再让链表地址等于pos的地址,这样就完成插入了。

如果pos不是头节点的话就进入else,首先定义一个pcur指针,通过循环

,当pcur的next不是pos就一直向后走,直到pcur的next是pos时,此时就退出循环,先将pos插入tmp上,再将tmp插入到pcur-next就可以了,然后达到了指定数据前插入数据的效果。

2.在指定数据之后插入数据

在指定数据之后插入数据有两种思路,第一种是先将plist->next等于newnode再将后面数据拼到newnode后面,第二种是直接将pos后面数据插入到newnode然后再将newnode插入到pos->next上。想一下,这两种哪种不可行,仔细一想,第一种是不可行的,为什么呢,因为当把pos->的数据存储newnode时,此时后面的数据就找不到了啊。但是也不是不可解决的, 我们可以用一个临时指针来存储后面那个地址,这样就可以找到后面的地址。

源代码

这个代码就很简单就不简述了。

3.删除节点

要删除节点,首先能肯定的是*phead和phead不能为空指针,其次pos也不能为空指针,因为pos如果为空的话就没必要删除了,源代码

代码语言:javascript
代码运行次数:0
复制
void SLTErase(SLTNode** phead, SLTNode* pos)
{
	assert(phead, *phead);
	assert(pos);
	if (*phead == pos)
	{
		SLTPopFront(phead);
	}
	else
	{
		SLTNode* ptail = *phead;
		while (ptail->next != pos) 
		{
			ptail = ptail->next;
		}
		ptail->next = pos->next;
		free(pos);
		pos = NULL;
	}
}

4.删除pos之后的节点

删除pos之后的数据不用修改链表,只用把pos的next的next的值存放到pos的next上就行,用临时指针来接收pos—>next,然后销毁这个数据的空间即可。

代码语言:javascript
代码运行次数:0
复制
void SLTEraseAfter(SLTNode* pos)
{

	assert(pos);
	SLTNode* tmp = pos->next;
	pos->next = tmp->next;
	free(tmp);
	tmp = NULL;	
		
}

5.销毁链表

销毁链表需要将链表的每一个数据都要进行销毁,首先要保证phead和*phead都不是空指针。

然后通过一个循环来遍历链表,先定义while循环,然后循环终止的条件是链表走到NULL了,此时就可以退出循环了,先定义一个pcur来接收*phead,条件就为pcur,先进入循环,定义一个中间指针,next,然后释放pcur再让pcur指向中间指针的地址,通过这个循环,就可以释放所有的链表数据,最后将链表置为空,这样就实现了链表的释放。

代码语言:javascript
代码运行次数:0
复制
void SLTDestory(SLTNode** phead)
{
	assert(phead && *phead);
	SLTNode* pcur = *phead;
	while (pcur)
	{
		SLTNode* next = pcur - next;
		free(pcur);
		pcur = next;
		
	}
	*phead = NULL;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.在指定位置之前插入数据
  • 2.在指定数据之后插入数据
  • 3.删除节点
  • 4.删除pos之后的节点
  • 5.销毁链表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档