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

习题11-7 奇数值结点链表 (20分) (奇数值节点链表分离) 习题11-7 奇数值结点链表 (20分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。 阅读详情

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

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:

1 2 2 3 4 5 6 7 -1

输出样例1:

1 3 5 7 
2 2 4 6 

答案代码块

//此方法思路是:getodd函数中将原链表中奇数添加至奇数表输出,将原链表中的奇数删除用作偶数链表。方法有一点复杂不太推荐
//另一个思路是:getodd函数中新建两个链表判断奇数偶数分别添加至奇数链表和偶数链表。方法较为易懂。代码中没有写此方法

struct ListNode *readlist(){
	int data = 0 ;
	struct ListNode *pHead = NULL;
	struct ListNode *pEnd , *pNew;
	while(scanf("%d",&data) && data != -1){
		pNew = (struct ListNode*)malloc(sizeof(struct ListNode));//动态分配内存 
		if(pNew!=NULL){
			pNew->data=data;	//新增数据 
			pNew->next=NULL;
		}
		
		if( pHead != NULL){	
			pEnd->next = pNew;	//pEnd经过赋值过后指向了这个结构体所以直接使用pEnd->next = pNew;
		}else{	//如果pHead==null也就是第一次运行 
			pHead = pNew;	//此时赋值的是地址 
		}
		pEnd = pNew;	//此时赋值的是地址 
	}
	return pHead;	//返回首地址 
}
struct ListNode *getodd( struct ListNode **L ){
	int data;
	struct ListNode *pHead = NULL;
	struct ListNode *pEnd = NULL , *pNew;

	struct ListNode *q , *pL ,*hL;	
	hL =pL = *L;	//记录L首地址 
 	for( q = NULL ; pL ;  q = pL,pL = pL->next ){
		data = pL->data;
		if( data % 2 != 0 ){	//将奇数添加至新链表 
			pNew = (struct ListNode *)malloc(sizeof(struct ListNode));
			if(pNew != NULL){
				pNew->data = data;
				pNew->next = NULL;
			}
			if( pHead != NULL){
				pEnd->next = pNew;
			}else{
				pHead = pNew;
			}
			pEnd = pNew;
			
			if(q){	//q不为null时 将q->next等于pL的后一个 
				q->next=pL->next;
				free(pL);	//删除pL地址 
				pL = q;		//否则循环的 pL = pL->next会报错 
			}
			else{	//q为null时 首地址指向下一个地址 
				hL = pL->next;
			}
		}
	}
	if(hL){	//如果hL不为空(输入值只有一个奇数时) 
		data=hL->data;	
		if(data%2!=0){	//判断偶数链表第一个数是否是奇数 
			hL=NULL;	//如果是偶数则将首地址改为null, 
		}
	}

	*L = hL;	//返回偶数链表地址
	return pHead;
}
习题11-7 奇数值结点链表 提取链表奇数结点 阅读详情

相关推荐

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

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

Goku_Yu的博客 913

PTA: 奇数值结点链表(C语言版)

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

空白的博客 9463

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

PTA习题11-7 奇数值结点链表 (20分) 题目如下: 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd(...

孤独的风中一匹狼 1575

实验11-2-6 奇数值结点链表 (20分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

u014390786的博客 1131

PTA 6-11 单链表结点删除 (20 分) C语言。

** 6-11 单链表结点删除 (20 分) 原创文章,欢迎转载,转载时请附上链接: ** 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode...

一只彩乌鸦 1万+

Android malloc_debug实现原理及使用

2)设置 __libc_globals 对象中的 libc_globals.default_dispatch_table 和 current_dispatch_table 指向 malloc_dispatch_table,以后在 malloc 库函数里都会通过 GetDispatchTable(),这个函数就是返回的 current_dispatch_table 指针;MAX_FRAMES 表示被抓取的 frames 的数量,如果设为0, 表示在分配空间被释放时,不会抓取任何调用栈。

专注于系统快稳省领域 3743

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

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返

qq_57425554的博客 234

别再只盯着YOLOv8了!手把手带你用PaddleDetection的PP-YOLOE+搞定你的第一个检测项目

本文介绍了PP-YOLOE+在目标检测领域的优势与应用实践,对比YOLOv8展示其在精度、速度和部署便利性上的突破。通过详细的代码示例和实战教程,帮助开发者快速上手PaddleDetection工具链,实现产业级目标检测项目,提升开发效率。

weixin_42701915的博客 185

浙大 | PTA 习题11-7 奇数值结点链表 (20分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单

赞美太阳的博客 998

非凸问题的求解方法以及连续凸逼近SCA(Successive Convex Approximation)方法

非凸问题的求解方法 针对形如下式的函数: min⁡x∈XV(x)=F(x)+G(x)\min\limits_{{\bf{x}}\in X} V(x)=F(x)+G(x)x∈Xmin​V(x)=F(x)+G(x); 其中F为光滑的(不一定convex),G是convex的但是可能不可微,且存在:对于n维实矢量空间,有X=X1×...×XNX=X_1 \times...\times X_NX=X1​×...×XN​; x=(x1,...,xN)\bf{x} =(x_1,...,x_N)x=(x1​,...,xN

weixin_44535200的博客 2万+

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

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

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数

weixin_63013120的博客 1192

MaxScript批量修改材质、贴图名称

MaxScript批量修改材质、贴图名称1 实现效果1.1 修改前材质、贴图名称1.2 修改后2 代码 1 实现效果 1.1 修改前材质、贴图名称 1.2 修改后 2 代码 prefixName = "prefiname" maxFile = "maxfilepath" makeDir "newBitmappath" mapsPath = newbitmappath + "\\" fn formatStr index = ( str = index as string newS

郑德帅 3241

PTA习题11-7 奇数值结点链表(20 分) 改进版

#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define N 20 typedef struct ListNode{ int Data; ListNode *Next; }ListNode; ListNode *readlist(); ListNode *getodd(ListNode **L); void printl...

Albert_Albert_Albert的博客 3962

MicroCap声学仿真介绍(二)-创建声学仿真元件

声学库里包含孔、管、障板辐射器等器件,我们只需要按照仿真的需求,将声学库里的器件排列好,输入参数,用线连接起来即可。这里我们用D指代孔的直径,L指代孔的长度,N代表孔的数量。26.在弹出的界面中做如下设置:需要先在右面的选框里找到对应的项,然后右键Add Part,再之后就如下设置。3.在弹出的界面中,选择“Macro file(.mac)”,并点击右上角的“OK”下面就以声学仿真中常见的“孔”来做示例,跟大家一块演示一下宏程序的新建。10.在上图中“Value”中填入“R”,然后点击左边的“OK”按钮;

山无忧的博客 2200

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图。

qq_36287830的博客 3103

PTA-C语言习题 习题11-7 奇数值结点链表 (20分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单

Mr_middle的博客 715

[明道云] -基础教学5- 明道云 40 种控件详解与场景解析

明道云工作表提供40种业务控件,涵盖文本、数值、关联、公式等类型,支持各类业务场景。文本类支持多行输入、正则校验;数值/金额类提供进度条、百分比显示等功能;关联类实现多表数据引用;公式/函数类支持复杂逻辑运算;自动化类包括打印模板、API调用等控件。合理使用这些控件可提升数据收集质量和自动化效率,同时需注意控件联动的性能影响和权限配置。关键控件包括关联记录、级联选择、公式计算等,适用于订单管理、客户信息关联等业务场景。

每日出拳老爷子的博客 8541

PTA|《C语言程序设计(第3版)》习题11-7 奇数值结点链表 (20分)

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

烫烫烫的博客 503

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PTA 习题11-7 奇数值结点链表(单链表奇偶结点分离)

基于PTA习题,讨论单链表的奇偶结点分离问题。下为题目: 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入...

咸鱼王志奇的博客 1200

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

PTA~习题11-7 奇数值结点链表 (20分)~2020年11月

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单

hao606的博客 1495

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PTA 习题11-8 单链表结点删除 (20分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义 struct ListNode *readlist(); struct ListNode *deletem( struct ListNode *L, int m ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返

eclipse_ali的博客 3804

PTA|《C语言程序设计实验与习题指导(第3版)》实验11-2-6 奇数值结点链表 (20分)

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

烫烫烫的博客 865
上一篇: PTA 练习7-4 找出不是两个数组共有的元素 (20分)
下一篇: PTA 习题11-8 单链表结点删除 (20分)
eclipse_ali
博客等级 码龄7年 85粉丝 103原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值