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

目录

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

上一篇:Docker常用命令


下一篇:PHP 和 python RSA签名与验签,CRYPT_RSA_SIGNATURE_PSS模式签名问题处理