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