Linux循环链表删除节点,删除循环单链表开头元素
要删除循环单链表中的开头节点,需要进行一些指针调整。
在开头有三种从循环单链表中删除节点的方案有以下几种。
情况1 :(链表为空)
如果链表为空,则条件head == NULL将变为true,在这种情况下,只需要在屏幕上打印下溢并退出。
if(head == NULL)
{
printf("UNDERFLOW\n");
return;
}
情况2 :(链表包含单个节点)
如果链表只包含一个节点,则条件head->next == head将变为true。 在这种情况下,需要删除整个链表并使头指针空闲。 这将通过使用以下语句来完成。
if(head->next == head)
{
head = NULL;
free(head);
}
情况3 :(链表包含多个节点)
如果链表包含多个节点,那么在这种情况下,需要使用指针ptr遍历链表以到达列表的最后一个节点。 这将通过使用以下语句来完成。
ptr = head;
while(ptr -> next != head){
ptr = ptr -> next;
}
在循环结束时,指针ptr指向链表的最后一个节点。 因为,链表的最后一个节点指向链表的头节点。 因此,这将改变为现在,链表的最后一个节点将指向头节点的下一个节点。
ptr->next = head->next;
现在,通过使用C语言中的free()函数释放头指针。
free(head);
使节点指向最后一个节点的下一个节点,即链表的新头。
head = ptr->next;
这样,节点将从一开始就从循环单链表中删除。
算法
第1步:IF HEAD = NULL
提示内存溢出
转到第8步
[IF结束]
第2步:设置PTR = HEAD
第3步:在PTR->NEXT!= HEAD 时重复第4步
第4步:SET PTR = PTR->next
[循环结束]
第5步:设置PTR->NEXT = HEAD->NEXT
第6步:免费头
第7步:SET HEAD = PTR->NEXT
第8步:退出
示意图
C语言实现代码
#include
#include
void create(int);
void beg_delete();
struct node
{
int data;
struct node *next;
};
struct node *head;
void main()
{
int choice, item;
do
{
printf("1.Append List\n2.Delete Node from beginning\n3.Exit\n4.Enter your choice?");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("Enter the item\n");
scanf("%d", &item);
create(item);
break;
case 2:
beg_delete();
break;
case 3:
exit(0);
break;
default:
printf("Please Enter valid choice\n");
}
} while (choice != 3);
}
void create(int item)
{
struct node *ptr = (struct node *)malloc(sizeof(struct node));
struct node *temp;
if (ptr == NULL)
{
printf("OVERFLOW");
}
else
{
ptr->data = item;
if (head == NULL)
{
head = ptr;
ptr->next = head;
}else
{
temp = head;
while (temp->next != head)
temp = temp->next;
ptr->next = head;
temp->next = ptr;
head = ptr;
}
printf("Node Inserted\n");
}
}
void beg_delete()
{
struct node *ptr;
if (head == NULL)
{
printf("UNDERFLOW\n");
}else if (head->next == head)
{
head = NULL;
free(head);
printf("Node Deleted\n");
}else
{
ptr = head;
while (ptr->next != head)
ptr = ptr->next;
ptr->next = head->next;
free(head);
head = ptr->next;
printf("Node Deleted\n");
}
}
执行上面示例代码,得到以下结果 -
1.Append List
2.Delete Node from beginning
3.Exit
4.Enter your choice?1
Enter the item
12
Node Inserted
1.Append List
2.Delete Node from beginning
3.Exit
4.Enter your choice?2
Node Deleted
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
Linux循环链表删除节点,删除循环单链表开头元素相关推荐
- 循环链表(循环单链表和双链表)
循环链表 前言 一.循环单链表的初始化 二.判断是否为空或表尾结点 三.循环双链表的初始化 四.循环双链表的插入与删除 前言 对于循环单链表而言,在进行插入和删除时,可以让指针指向尾部,对于表头(通过 ...
- c语言循环单链表实现约瑟夫环问题
题目: 约瑟夫(Joeph)问题的一种描述是:编号为1,2,-,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值max,从第一个人开始按顺时针方向自1开始 ...
- 线性表文档之循环单链表
循环单链表 定义 概念 循环单链表是在单链表的基础上,将链表最后一个结点的 next 指针域指向了链表的第一个结点(如果单链表是带头结点的则最后一个结点的 next 指针域指向头结点:如果单链表是不带 ...
- (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表
文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...
- 循环单链表及C语言实现
本博文介绍循环单链表及其C语言的实现 目录 循环单链表 循环单链表的操作 插入 头结点插入 尾结点插入 指定位置插入 删除 头结点删除 尾结点删除 指定位置删除 遍历 查找 循环单链表的C语言实现 循 ...
- pta 循环单链表的删除(java)
采用循环单链表做为线性表的存储结构,编写成员方法:删除运算. 删除成功,输出删除后的线性表的所有元素 删除失败,输出"error" 输入样例: 5 2 8 7 4 6 4 输出样例 ...
- 循环链表详解(循环单链表/循环双链表)
目录 一.循环单链表 二.循环双链表 一.循环单链表 循环单链表的表尾结点的next指针总是指向头结点. 所以在初始化循环单链表的时候,需要记得将头结点的next指针指向头结点自己: 判断循环单链表 ...
- 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)
所实现的循环单链表的结构例如以下图所看到的: 循环单链表的实现,和上一篇文章单链表的实现大致同样点击打开链接,略有差别: 1:循环推断的条件不再是s == NULL或者s->next == NU ...
- C++删除单链表指定元素
C++删除单链表指定元素 对于C++单链表的创建与打印操作之前已经讲述过,那么普通的元素删除也可以很容易实现.在力扣203.移除链表元素中提出了一种元素删除操作,题目如下: 本来觉得很简单,但是在实现 ...
最新文章
- 【leetcode】 算法题1 两数之和
- python随机数种子通俗_随机数种子random.seed()理解
- python torch库_python安装torch踩过的坑
- 利用数组创建二叉树并赋值
- 作者:林立,华中科技大学计算机科学与技术学院讲师。
- git rm -r --cached_【Git】工作中99%能用到的git命令
- flask-mail异步发送邮件_Python爬虫系列:用邮件来通知爬虫异常状况
- pypy mysql 兼容_PyPy运行Django+MySQL简单教程
- docker tar 镜像 容器相互转换
- [转贴]彻底解决 CrystalReports 登录失败问题。
- IM即时通讯项目讲解(二) 自定义实现图片选择GalleryView
- edius裁剪快捷键_edius5.0常用快捷键 edius快捷键使用大全
- Windows重新生成UEFI引导,解决Windows蓝屏\BCD 0xc0000098
- GPC凝胶色谱理论和应用(三)
- 构造函数this指向
- PyQt5 组合键
- mac数字键盘错乱_苹果电脑键盘打不出数字解决办法
- 列车排座2 算法笔试题
- Android实现制作氢壁纸,氢壁纸怎么制作?氢壁纸制作方法介绍[图]
- 两个质数互质是_科学网—理解黎曼猜想(二)两个自然数互质的概率是多少? - 袁岚峰的博文...
热门文章
- android危险权限分组,Android 6.0权限请求相关及权限分组方法
- AttributeError: 'str' object has no attribute 'decode' django问题
- Android NDK环境搭建
- Pipenv和Python虚拟环境
- 【基环树DP】[NOI2012]迷失游乐园
- eclipse ide for java ee developers与eclipse ide for java developers有什么区别
- Codeforces 429 A. Xor-tree
- UA PHYS515A 电磁理论V 电磁波与辐射11 简单辐射问题 电偶极子的辐射
- UA MATH575B 数值分析下 计算统计物理例题2
- [PM Tools]软件项目进度跟踪表v4.0