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

struct ListNode {int data;ListNode *next;
};

函数接口定义:

struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>struct ListNode {int data;struct ListNode *next;
};struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{struct ListNode *p = L;while (p) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main()
{struct ListNode *L, *Odd;L = readlist();Odd = getodd(&L);printlist(Odd);printlist(L);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

1 2 2 3 4 5 6 7 -1

输出样例:

1 3 5 7
2 2 4 6

方法一

#include <stdio.h>
#include <stdlib.h>struct ListNode {int data;struct ListNode *next;
};struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{struct ListNode *p = L;while (p) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main()
{struct ListNode *L, *Odd;L = readlist();Odd = getodd(&L);printlist(Odd);printlist(L);return 0;
}struct ListNode *readlist()
{struct ListNode *q,*head,*tail;head=tail=NULL;q=(struct ListNode*)malloc(sizeof(struct ListNode));scanf("%d",&q->data);while(q->data!=-1){if(head==NULL){head=q;head->next=NULL;} if(tail!=NULL){tail->next=q;} tail=q;tail->next=NULL;q=(struct ListNode*)malloc(sizeof(struct ListNode));scanf("%d",&q->data);}return head;
}struct ListNode *getodd( struct ListNode **L )
{struct ListNode *p0,*p1,*head_odd,*tail_odd,*head_even,*tail_even;head_odd = tail_odd = head_even = tail_even = NULL;while((*L) != NULL){if( ((*L)->data)%2 == 0 ){p0 = (struct ListNode *)malloc(sizeof(struct ListNode));p0->data = ((*L)->data);if( head_even == NULL ){head_even = p0;head_even->next = NULL;}if( tail_even != NULL){tail_even->next = p0;}tail_even = p0;tail_even->next = NULL;}else{p1 = (struct ListNode *)malloc(sizeof(struct ListNode));p1->data = ((*L)->data);if( head_odd == NULL ){head_odd = p1;head_odd->next = NULL;}if( tail_odd != NULL){tail_odd->next = p1;}tail_odd = p1;tail_odd ->next = NULL;}*L=(*L)->next;}*L = head_even;return head_odd;
}
//申请两个结构体变量p0,p1分别存放偶数,奇数;

方法二

#include <stdio.h>
#include <stdlib.h>struct ListNode {int data;struct ListNode *next;
};struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{struct ListNode *p = L;while (p) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main()
{struct ListNode *L, *Odd;L = readlist();Odd = getodd(&L);printlist(Odd);printlist(L);return 0;
}
struct ListNode *readlist()//正向开辟空间
{struct ListNode *p,*head,*tail;head=tail=NULL;p = (struct ListNode *)malloc(sizeof(struct ListNode));scanf("%d",&p->data);while(p->data != -1){if(head == NULL){head=p;head->next=NULL;} if(tail != NULL){tail->next=p;}tail=p;tail->next=NULL;p = (struct ListNode *)malloc(sizeof(struct ListNode));scanf("%d",&p->data);}return head;
}struct ListNode *getodd( struct ListNode **L )
{struct ListNode *p,*head_odd,*head_even,*tail_odd,*tail_even;head_odd = head_even = tail_odd = tail_even = NULL;while((*L) != NULL){if( ((*L)->data)%2 != 0 ){p = (struct ListNode*)malloc(sizeof(struct ListNode));p->data = (*L)->data;if(head_odd == NULL){head_odd = p;head_odd->next = NULL;}if(tail_odd != NULL){tail_odd->next = p;}tail_odd = p;tail_odd->next = NULL;}else{p = (struct ListNode*)malloc(sizeof(struct ListNode));p->data = (*L)->data;if(head_even == NULL){head_even = p;head_even->next = NULL;}if(tail_even != NULL){tail_even->next = p;}tail_even = p;tail_even->next = NULL;}*L=(*L)->next;}*L=head_even;return head_odd;
}
//只申请一个结构体变量*q来存放数值

6-5 奇数值结点链表 (20分)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  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. Docker(十一):Docker实战 安装 PHP 5.6、7
  2. 数据基本类型以及相关举例
  3. 大神讲解Java for循环的几种用法
  4. vaadin_Vaadin和DukeScript中的Hello World
  5. Flink 合流水位线图解
  6. 模仿豆丁、百度文库播放器
  7. python异常处理知识点_一文掌握 Python 异常处理的所有知识点
  8. service mysqld restart 报错 Redirecting to /bin/systemctl restart mysqld.service
  9. MapGIS云认证失败
  10. 【解决办法】adobe audition打不开 显示MSVCR71.dll丢失
  11. phython入门开始
  12. 音乐网站制作之音乐播放
  13. Excel - 自动填充
  14. 浙大版《C语言程序设计(第3版)》题目集 习题4-6 水仙花数 (20 分)
  15. 力扣 (LeetCode)-对称二叉树,树|刷题打卡
  16. VCN新官网正式上线:展望中文编程未来
  17. java操作文件之文件重命名
  18. iOS-自定义手势操作
  19. RuntimeError: CUDA error: an illegal memory access was encountered
  20. PHP处理CODE128C条形码数据为标准的打印机ESC指令

热门文章

  1. 莫那什大学柯秋红老师招收计算机视觉/机器学习方向博士研究生
  2. 《SysML精粹》学习记录--第七章
  3. (node)Warning: Accessing non-existent property ‘xxx‘ of module exports inside circular depen
  4. windows10下VM安装安卓虚拟机PhoenixOS
  5. MySQL 5.6 (Win7 64位)下载、安装与配置图文教程
  6. 大数据与人工智能系列文章
  7. 数值微分25 - Poisson 泊松方程(一维、二维):已知一些自定义的二阶导数点,得到一条曲线,即原方程平滑地通过它们)
  8. 怎么退出自适应巡航_什么是ACC自适应巡航
  9. 802.11a/b/g/n区别
  10. CentOS7 ftp服务离线安装