6-5 奇数值结点链表 (20分)
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分)相关推荐
- 习题11-7 奇数值结点链表 (20 分) -链表
习题11-7 奇数值结点链表 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int ...
- 奇数值结点链表 (20 分)
本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode {int data;ListNode *next;}; ...
- 习题11-7 奇数值结点链表 (20分)
网上很多答案都是新建两个链表分别存放奇数和偶数,我的思路是在原有链表里进行删除操作,同时将奇数结点放入新的链表中.也有同学有一样的思路,但是具体代码实现方式不一样,我在这里分享一下我的想法,给各位同学 ...
- 浙大大学 PTA 奇数值结点链表
6-5 奇数值结点链表 (20 point(s)) 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode { ...
- PTA-链表学习-----奇数值结点链表
奇数值结点链表 解法一 struct ListNode *readlist() {struct ListNode *head = NULL, *p;int data=0;while(scanf(&qu ...
- 奇数值结点链表(C语言实现)
习题11-7 奇数值结点链表(C语言实现) 分析:没有头结点的链表操作太麻烦了. ①注意第一个结点是奇数值结点的删除和其他结点的删除情况: ②注意奇数链表第一个结点的创建和后续结点的创建. #incl ...
- 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. ...
最新文章
- Docker(十一):Docker实战 安装 PHP 5.6、7
- 数据基本类型以及相关举例
- 大神讲解Java for循环的几种用法
- vaadin_Vaadin和DukeScript中的Hello World
- Flink 合流水位线图解
- 模仿豆丁、百度文库播放器
- python异常处理知识点_一文掌握 Python 异常处理的所有知识点
- service mysqld restart 报错 Redirecting to /bin/systemctl restart mysqld.service
- MapGIS云认证失败
- 【解决办法】adobe audition打不开 显示MSVCR71.dll丢失
- phython入门开始
- 音乐网站制作之音乐播放
- Excel - 自动填充
- 浙大版《C语言程序设计(第3版)》题目集 习题4-6 水仙花数 (20 分)
- 力扣 (LeetCode)-对称二叉树,树|刷题打卡
- VCN新官网正式上线:展望中文编程未来
- java操作文件之文件重命名
- iOS-自定义手势操作
- RuntimeError: CUDA error: an illegal memory access was encountered
- PHP处理CODE128C条形码数据为标准的打印机ESC指令
热门文章
- 莫那什大学柯秋红老师招收计算机视觉/机器学习方向博士研究生
- 《SysML精粹》学习记录--第七章
- (node)Warning: Accessing non-existent property ‘xxx‘ of module exports inside circular depen
- windows10下VM安装安卓虚拟机PhoenixOS
- MySQL 5.6 (Win7 64位)下载、安装与配置图文教程
- 大数据与人工智能系列文章
- 数值微分25 - Poisson 泊松方程(一维、二维):已知一些自定义的二阶导数点,得到一条曲线,即原方程平滑地通过它们)
- 怎么退出自适应巡航_什么是ACC自适应巡航
- 802.11a/b/g/n区别
- CentOS7 ftp服务离线安装