p12 63.删除无头结点无头指针的循环链表中所有值为x的结点 桂林电子科技大学2015年 (c语言代码实现)注释详解

 本题代码如下

void delete(linklist* L, int x)
{lnode* p = *L, * q = *L;while (p->next != q)// 从第一个结点开始遍历链表,直到尾结点的前一个结点{if (p->next->data == x)//判断是否等于x{lnode* r = p->next;//将r指向x的位置p->next = r->next;//p指向r后面的位置free(r);//释放r指向的x的内存空间}else//否则p继续向后遍历{p = p->next;}}if ((*L)->data == x)// 如果第一个结点是要删除的元素{lnode* q = *L;// 将要删除的结点保存在变量q中*L = (*L)->next;// 将链表第一个指针指向它下一个节点free(q);//释放他的空间}
}

完整测试代码如下

#include<stdio.h>
#include<stdlib.h>
typedef struct lnode
{int data;struct lnode* next;
}lnode, * linklist;
int a[5] = { 1,2,3,4,5 };
int n = 5;
void buildlink(linklist* L)
{*L = NULL; //将指向链表第一个指针置为空int i = 0;lnode* s;for (i = 0; i < n; i++){s = (lnode*)malloc(sizeof(lnode));// 分配内存空间给新结点s->data = a[i];// 设置结点数据if (*L == NULL)// 如果链表为空{*L = s;// 将新节点设为链表头s->next = s;// 将新节点的next指向自己,形成循环链表}else// 如果链表不为空{lnode* r = *L; // 从第一个结点开始遍历链表while (r->next != *L) // 找到尾节点的前一个节点{r = r->next;}r->next = s;// 将新节点插入到尾节点之后s->next = *L;// 将新节点插入到尾节点之后}}
}
void delete(linklist* L, int x)
{lnode* p = *L, * q = *L;while (p->next != q)// 从第一个结点开始遍历链表,直到尾结点的前一个结点{if (p->next->data == x)//判断是否等于x{lnode* r = p->next;//将r指向x的位置p->next = r->next;//p指向r后面的位置free(r);//释放r指向的x的内存空间}else//否则p继续向后遍历{p = p->next;}}if ((*L)->data == x)// 如果第一个结点是要删除的元素{lnode* q = *L;// 将要删除的结点保存在变量q中*L = (*L)->next;// 将链表第一个指针指向它下一个节点free(q);//释放他的空间}
}
void print(linklist* L)
{lnode* k = *L;do{printf("%d ", k->data);k = k->next;} while (k != *L); // 当回到第一个结点时结束遍历
}
int main()
{linklist L;buildlink(&L);print(&L);delete(&L, 3);printf("\n");print(&L);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/217058.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言—一维数组在内存中的存放

1、先看代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int arr[]{1,2,3,4,5,6,7,8,9,10}; int szsizeof(arr)/sizeof(arr[0]);int i0;for(i0;i<sz;i){printf("&arr[%d] %p\n",i,&arr[i]);}return 0; } 2、定…

Spring Cloud 版本升级遇坑记:OpenFeignClient与Gateway的恩怨情仇

Spring Cloud 版本升级遇坑记&#xff1a;OpenFeignClient与Gateway的恩怨情仇 近日&#xff0c;在对项目中的 Spring Boot、Spring Cloud 以及 Spring Cloud Alibaba 进行版本升级时&#xff0c;遭遇了一个令人头疼的问题&#xff1a;Spring Cloud Gateway 在运行时一直卡住&a…

计算机组成原理(计算机系统概述)

目录 一. 计算机的发展二. 计算机硬件的基本组成2.1 早期冯诺依曼机2.2 现代计算机的结构 三. 各硬件的工作原理3.1 主存储器的基本组成3.2 运算器的基本组成3.3 控制器的基本组成 四. 计算机的工作过程 \quad 一. 计算机的发展 计算机系统 硬件 软件 #mermaid-svg-gp2AsYELE…

十大排序之选择排序(详解)

文章目录 &#x1f412;个人主页&#x1f3c5;算法思维框架&#x1f4d6;前言&#xff1a; &#x1f380;选择排序 时间复杂度O(n^2)&#x1f387;1. 算法步骤思想&#x1f387;2.动画实现&#x1f387; 3.代码实现 &#x1f412;个人主页 &#x1f3c5;算法思维框架 &#x1f…

基于IDEA+SpringBoot+微服务开发的P2P平台项目

基于springboot的社区养老医疗综合服务平台 项目介绍&#x1f481;&#x1f3fb; 项目名称&#xff1a;基于P2P的金融项目 一个基于P2P&#xff08;点对点&#xff09;模式的金融服务平台&#xff0c;致力于提供透明、高效、安全的金融服务。我们的目标是连接借款人与投资者&am…

pat实现基于邻接矩阵表示的深度优先遍历[含非递归写法]

文章目录 1.递归2.非递归 1.递归 void DFS(Graph G, int v) {visited[v] 1;printf("%c ", G.vexs[v]);for (int i 0; i < G.vexnum; i) {if (!visited[i] && G.arcs[v][i]) DFS(G, i);} }2.非递归 #include <stack> #include <iostream> …

如何打造垂直LLM的护城河

B2B人工智能初创企业的一个伟大策略是打造“垂直人工智能”产品&#xff1a;成为特定行业的人工智能助手&#xff0c;比如律师、金融服务、医生。 听起来很简单&#xff1a;你可以利用LLM的超能力&#xff0c;并将其应用于宠物行业的特定数据和用例。 这就是我们在Explain所做的…

【Clang Static Analyzer 代码静态检测工具详细使用教程】

Clang Static Analyzer sudo apt-get install clang-tools scan-build cmake .. scan-build make -j4 编译完成之后会在终端提示在哪里查看报错文档: scan-build: 55 bugs found. scan-build: Run scan-view /tmp/scan-build-2023-11-24-150637-6472-1 to examine bug report…

双向链表超详解——连我奶奶都能学会的复杂链表(带头双向循环)

文章目录 前言一、双向链表的概念二、双向链的结构设计三、双链表的基本功能接口四、双向链表接口的实现4.1、创建结点4.2、初始化链表4.3、打印链表4.4、尾插结点4.5、尾删结点4.6、头插结点4.7、头删结点4.8、在pos结点前面插入4.9、删除pos位置的结点4.10、查找链表中的某个…

VR Interaction Framework2.0使用

1 按键 &#xff0c;比如按压下手柄的B键 if (InputBridge.Instance.BButtonDown){print("kkkkkkbbbbb456");} 2抓取某个物体&#xff0c;那么就在要抓取的那个物体上加一些组件&#xff0c;特别是Grabble Unity Events

PyTorch-ReID重识别算法库与数据集资料汇总

Torchreid 是一个用于深度学习人员重新识别的库&#xff0c;用 PyTorch 编写&#xff0c;为我们的 ICCV’19 项目 Omni-Scale Feature Learning for Person Re-Identification 开发。 PyTorch-ReID的特点是 多GPU训练支持图像和视频 REID端到端培训和评估极其轻松地准备 Rei…

面试题:什么是自旋锁?自旋的好处和后果是什么呢?

文章目录 什么是自旋自旋和非自旋的获取锁的流程 自旋锁的好处AtomicLong 的实现实现一个可重入的自旋锁示例自旋的缺点适用场景 什么是自旋 “自旋”可以理解为“自我旋转”&#xff0c;这里的“旋转”指“循环”&#xff0c;比如 while 循环或者 for 循环。“自旋”就是自己…