前言
大家好我是東木,在优快云上持续更新更多原创文章,唯一指定传送门:東木的博客
本文主要介绍一下带头结点的单链表实现链表的销毁与按位置删除结点,两者实际上都是删除,最重要的是对链表的遍历。在本文,我们规定按位置删除结点中的位置 i >= 1,也就是i从1开始。话不多说,开搞。
链表的销毁
1.示意图
2.代码块
void destroyList(node*& head)
{
//定义两个node类型指针
node* p, * pTemp;
//p指向头结点
p = head;
while (p != NULL)//遍历一个一个删除结点
{
pTemp = p->next;//pTemp指向下一个
delete(p); //释放掉结点
p = pTemp;//p指向新的头结点
//次循环结束后p和pTemp都指向NULL
}
//最后一步很重要,指针记得赋值NULL,防止变成野指针
head = NULL;
}
按位置删除结点
1.示意图
2.代码块
//按位置删除结点
void listDelete(node* head, int i)
{
//i应该从1开始如果i<=0则不执行
if (i <= 0)
{
cout << "i不可以小于或者等于零!\n";
return;
}
//如果大于等于1
node* p = head;//定义一个p = head
int k = 0;
while ((k != i - 1) && (p != NULL))//搜索i-1结点
{
p = p->next;
k++;
}
if (p == NULL || p->next == NULL)
{
cout << "删除位置的 i 超出范围\n";//删除位置 i 超出范围
}
else
{ //此时,p指向i-1结点
node* u = p->next; //u指向待删除节点 ai结点
p->next = u->next; //i-1的next指向i+1结点,
//或为空(i-1为最后结点)
delete u; //释放删除节点占据的内存空间,此句必须,
}
}