习题11-7 奇数值结点链表 (20分)
网上很多答案都是新建两个链表分别存放奇数和偶数,我的思路是在原有链表里进行删除操作,同时将奇数结点放入新的链表中。也有同学有一样的思路,但是具体代码实现方式不一样,我在这里分享一下我的想法,给各位同学提供一个思路。。。
代码如下
struct ListNode *getodd(struct ListNode **L)
{struct ListNode *p = NULL, *q = NULL,*newLast = NULL,*newHead=NULL;//p为快指针,q为慢指针for (q, p = *L; p; q = p, p = p->next){if (p->data % 2 == 1)//判断当前结点是否为奇数{struct ListNode *r=(struct ListNode *)malloc(sizeof(struct ListNode));//新malloc一个空间放临时数据r->data=p->data;r->next =NULL;if (q)//若q不为NULL,则p不是第一个节点,反之p为第一个节点,见else{q->next = p->next;//原链表中删除p这一结点(因为还要继续往下走所以不能free(p))if(q->data%2==1){//这里如果原链表的链表头下移之后如果还是奇数结点的话继续下移*L=q->next;}p=q;//这里在删除完p之后(因为没有free(p),所以内存中p还是存在的),要让p=q,即下一次循环从q开始(此时q->next已经跳过p),跳过已被删除的p结点newLast=newHead;if(newLast){//将该结点加在新链表的最后while(newLast->next){newLast=newLast->next;}newLast->next=r;}else{//这里是如果原链表第一个奇数结点不是链表头的话,能正确给新链表的链表头赋值newHead=r;}}else//若p为第一个结点且该结点处data为奇数时,新的链表头就是r(r->data为p->data,但是r->next为NULL),此时原链表的链表头向下移{newHead=r;*L = p->next;}}}return newHead;
}
编译通过,所有测试点通过,应该没什么问题了吧。
毕竟我也是刚开始学,可能有的地方考虑的不对,不过这已经是我能写出来的最好的答案了(破涕为笑)
欢迎大家来讨论(捂脸)
习题11-7 奇数值结点链表 (20分)相关推荐
- 习题11-7 奇数值结点链表 (20 分) -链表
习题11-7 奇数值结点链表 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int ...
- 6-5 奇数值结点链表 (20分)
6-5 奇数值结点链表 (20分)本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int data; ...
- 奇数值结点链表 (20 分)
本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int data;ListNode *next;}; ...
- 浙大大学 PTA 奇数值结点链表
6-5 奇数值结点链表 (20 point(s)) 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode { ...
- 奇数值结点链表(C语言实现)
习题11-7 奇数值结点链表(C语言实现) 分析:没有头结点的链表操作太麻烦了. ①注意第一个结点是奇数值结点的删除和其他结点的删除情况: ②注意奇数链表第一个结点的创建和后续结点的创建. #incl ...
- PTA-链表学习-----奇数值结点链表
奇数值结点链表 解法一 struct ListNode *readlist() {struct ListNode *head = NULL, *p;int data=0;while(scanf(&qu ...
- PTA 奇数值结点链表 超详细
PTA 奇数值结点链表 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int data;ListN ...
- c语言奇数值结点链表,习题11-7 奇数值结点链表 (20 分)
本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode { int data; ListNode *next; ...
- 实验11 链表 程序1奇数值结点链表
输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表的信息. 第一种方法:逆向思维 #include<stdio. ...
最新文章
- spring cloud常用组件介绍
- [Python爬虫] Selenium自动访问Firefox和Chrome并实现搜索截图
- html5的新标记,HTML5 新标记
- 微信小程序 - 为何setData到页面上有的加分号
- JVM初学之类java的类加载器和双亲委派模型
- 数据库:数据导入/数据导出
- 爱分析·中国采购数字化行业趋势报告
- Python统计文件夹里文件个数及每一个文件的行数
- VC dll依赖性查看工具depends
- 什么人不在生死簿_15.生死簿如何决定人的生死?
- Android的启动流程
- FPGA实现UDP传输视频,提供2套verilog工程源码和接收显示上位机程序
- gh ost mysql_mysql 在线修改表结构工具 gh-ost
- ESP32设备驱动-ADXL345三轴加速计驱动
- Python:enumerate函数
- CSS3图片阴影效果解析
- JAVAWEB JavaScript 正则表达式
- ALV单元格设置下拉框固定值
- 数据治理 | 质检监控中心
- [创业之路-64]:股权激励的十种形式