ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【SHA256丶】单链表例题归纳(第一辑)

2021-09-13 12:00:14  阅读:186  来源: 互联网

标签:SHA256 链表 phead pnext ptemp 例题 节点 第一辑 指针


目录

(1)链表的创建【往头节点加】

(2)链表的创建【往尾节点加】

(3)链表的输出

(4)链表元素的删除【满足条件的一个】

(5)链表元素的删除【满足条件全部删除】


(1)链表的创建【往头节点加】

函数的形参传入:开始地址和结束地址,来控制链表的长度

创建一个头节点指针,置空,用于遍历链表元素

while(开始地址不等于结束地址)

{

创建一个普通节点指针,指向一段动态申请的节点内存

数据域使用解引用,赋值

指针域置空【动态申请的节点初始化】

接着再对头节点身份进行替换

1.链表为空,新节点即为头节点

2.链表不为空,新节点指向头节点,新节点成为头节点

开始地址向后偏移

}

Node * CreateList(int *pBegin , int * pEnd)
{
	Node * phead = nullptr;
	while (pBegin != pEnd)
	{
		Node * pnew = (Node *)malloc(sizeof(Node));
		pnew->n = *pBegin;
		pnew->pnext = nullptr;
		if (nullptr == phead)
			phead = pnew;
		else
		{
			pnew->pnext = phead;
			phead = pnew;
		}
		pBegin++;
	}
	return phead;
}

(2)链表的创建【往尾节点加】

函数的形参传入:开始地址和结束地址,来控制链表的长度

创建一个头节点指针,置空,用于遍历链表元素

while(开始地址不等于结束地址)

{

创建一个普通节点指针,指向一段动态申请的节点内存

数据域使用解引用,赋值

指针域置空【动态申请的节点初始化】

接着再对尾节点身份进行替换

1.链表为空,新节点既是头节点也是尾节点

2.链表不为空,尾节点指向新节点,新节点成为尾节点

开始地址向后偏移

}

Node * CreateListPushBack(int *pBegin, int * pEnd)
{
	Node * phead = nullptr, *prear = nullptr;
	while (pBegin != pEnd)
	{
		Node * pnew = (Node *)malloc(sizeof(Node));
		pnew->n = *pBegin;
		pnew->pnext = nullptr;
		if (nullptr == phead)
		{
			prear = phead = pnew;
		}
		else
		{
			prear->pnext = pnew;
			prear = pnew;
		}
		pBegin++;
	}
	return phead;
}

(3)链表的输出

函数的形参传入:链表头节点指针

while(头节点指针域判空)

{

头节点指针域不为空,输出头节点数据域的数据

头节点指针域指向下一个节点的指针域

}

void PrintList(Node * phead)
{
	while (phead != nullptr)
	{
		cout << (phead->n) << endl;
		phead = phead->pnext;
	}
}

(4)链表元素的删除【满足条件的一个】

函数的形参传入:链表头节点指针,数据

头节点判空

1.头节点满足条件

定义节点指针中间变量【ptemp】存储头节点指针

头节点指针指向下一个指针域

释放节点指针中间变量对应的内存【实现删除】

节点指针中间变量置空【防止野指针】

2.遍历头节点以后的节点

定义节点指针中间变量【p】存储头节点指针

while(下一节点不为空&&下一节点数据域不满足条件)

{

节点指针中间变量指向下一个节点的指针域

}

节点指针中间变量下一个指针域不为空【找到了满足条件的节点】

定义节点指针中间变量【ptemp】存储偏移后的头节点指针【p】的下一个节点

【p】的指针域指向【ptemp】的下一个节点的指针域

释放【ptemp】对应的内存

【ptemp】置空

Node * DelList(Node * phead, int num)
{
	if (phead != nullptr)
	{
		if (num == phead->n)
		{
			Node * ptemp = phead;
			phead = phead->pnext;
			free(ptemp);
			ptemp = nullptr;
		}
		else
		{
			Node * p = phead;
			while (p->pnext != nullptr &&   p->pnext->n != num)
		/*	while (p->pnext->n != num   &&   p->pnext != nullptr)*/
			{
				p = p->pnext;
			}
			if (p->pnext != nullptr)
			{
				Node * ptemp = p->pnext;
				p->pnext = ptemp->pnext;
				free(ptemp);
				ptemp = nullptr;
			}
		}
	}
	return phead;

(5)链表元素的删除【满足条件全部删除】

函数的形参传入:链表头节点指针,数据

1.从头结点满足条件

while(头节点不为空&&头节点的数据域满足条件)

{

定义节点指针中间变量【ptemp】存储头节点指针

头节点指针指向下一个节点

释放节点指针中间变量对应的内存

节点指针中间变量置空【防止野指针】

}

2.遍历头节点后的节点

头节点判空

while(头节点的下一个节点判空)

{

定义节点指针中间变量【p】存储头节点指针

头节点的下一个节点的数据域满足条件的判断

定义节点指针中间变量【ptemp】存储【p】的下一个节点

【p】的下一个节点指向【ptemp】的下一个节点

释放【ptemp】对应的内存

节点指针中间变量置空【防止野指针】

【p】向后指向

}

Node * DelsList(Node * phead, int num)
{
	while (phead != nullptr&&phead->n == num)
	{
		Node * ptemp = phead;
		phead = phead->pnext;
		free(ptemp);
		ptemp = nullptr;
	}
	if (phead!=nullptr)
	{
		Node * p = phead;
		while (p->pnext != nullptr)
		{
			if (num == p->pnext->n)
			{
				Node * ptemp = p->pnext;
				p->pnext = ptemp->pnext;
				free(ptemp);
				ptemp = nullptr;
			}
			else
			{
				p = p->pnext;
			}
		}
	}
	return phead;
}

标签:SHA256,链表,phead,pnext,ptemp,例题,节点,第一辑,指针
来源: https://blog.csdn.net/weixin_51669718/article/details/120264111

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有