网上很多答案都是新建两个链表分别存放奇数和偶数,我的思路是在原有链表里进行删除操作,同时将奇数结点放入新的链表中。也有同学有一样的思路,但是具体代码实现方式不一样,我在这里分享一下我的想法,给各位同学提供一个思路。。。

代码如下

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分)相关推荐

  1. 习题11-7 奇数值结点链表 (20 分) -链表

    习题11-7 奇数值结点链表 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int ...

  2. 6-5 奇数值结点链表 (20分)

    6-5 奇数值结点链表 (20分)本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int data; ...

  3. 奇数值结点链表 (20 分)

    本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int data;ListNode *next;}; ...

  4. 浙大大学 PTA 奇数值结点链表

    6-5 奇数值结点链表 (20 point(s)) 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode { ...

  5. 奇数值结点链表(C语言实现)

    习题11-7 奇数值结点链表(C语言实现) 分析:没有头结点的链表操作太麻烦了. ①注意第一个结点是奇数值结点的删除和其他结点的删除情况: ②注意奇数链表第一个结点的创建和后续结点的创建. #incl ...

  6. PTA-链表学习-----奇数值结点链表

    奇数值结点链表 解法一 struct ListNode *readlist() {struct ListNode *head = NULL, *p;int data=0;while(scanf(&qu ...

  7. PTA 奇数值结点链表 超详细

    PTA 奇数值结点链表 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int data;ListN ...

  8. c语言奇数值结点链表,习题11-7 奇数值结点链表 (20 分)

    本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode { int data; ListNode *next; ...

  9. 实验11 链表 程序1奇数值结点链表

    输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表的信息. 第一种方法:逆向思维 #include<stdio. ...

最新文章

  1. spring cloud常用组件介绍
  2. [Python爬虫] Selenium自动访问Firefox和Chrome并实现搜索截图
  3. html5的新标记,HTML5 新标记
  4. 微信小程序 - 为何setData到页面上有的加分号
  5. JVM初学之类java的类加载器和双亲委派模型
  6. 数据库:数据导入/数据导出
  7. 爱分析·中国采购数字化行业趋势报告
  8. Python统计文件夹里文件个数及每一个文件的行数
  9. VC dll依赖性查看工具depends
  10. 什么人不在生死簿_15.生死簿如何决定人的生死?
  11. Android的启动流程
  12. FPGA实现UDP传输视频,提供2套verilog工程源码和接收显示上位机程序
  13. gh ost mysql_mysql 在线修改表结构工具 gh-ost
  14. ESP32设备驱动-ADXL345三轴加速计驱动
  15. Python:enumerate函数
  16. CSS3图片阴影效果解析
  17. JAVAWEB JavaScript 正则表达式
  18. ALV单元格设置下拉框固定值
  19. 数据治理 | 质检监控中心
  20. [创业之路-64]:股权激励的十种形式

热门文章

  1. halcon19.11深度学习关于分类入门案例
  2. 所谓资本寒冬,不过是一厢情愿的破灭
  3. BurpSuite抓包出现建立安全连接失败(Software is Preventing Firefox From Safely Connecting to This Si)
  4. 嵌入式UWB定位测距设备开发实战(4)硬件之元器件选型
  5. Verilog语言菜鸟教程知识关键点记录
  6. SpringCloud熔断机制大概什么意思
  7. 轻量级微信动态活码生成管理源码
  8. 用axure做产品需求文档
  9. 堆外缓存是什么? OHC 堆外缓存使用简介
  10. 美团java面试经历_美团面试经历+答案