奇数值结点链表
发布日期:2021-06-29 11:18:04
浏览次数:3
分类:技术文章
本文共 2360 字,大约阅读时间需要 7 分钟。
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:
struct ListNode { int data; ListNode *next;};
函数接口定义:
struct ListNode *readlist();struct ListNode *getodd( struct ListNode **L );
函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。
函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。
裁判测试程序样例:
#include#include 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
思路:新建两个链表分别记录奇数值和偶数值的结点。
struct ListNode *readlist() { struct ListNode *head = NULL, *p, *pre;//pre保存当前结点的前驱结点 int n; scanf("%d", &n); while (n != -1) { p = (struct ListNode *) malloc(sizeof(struct ListNode)); p->data = n; p->next = NULL;//新结点的指针域设为NULL if (head == NULL) head = p; else pre->next = p;//前驱结点的指针域设为当前新建结点的地址 pre = p;//把pre设为p,作为下个结点的前驱结点 scanf("%d", &n); } return head;//返回头结点}struct ListNode *getodd(struct ListNode **L) { //head1,p1,pre1为奇数值结点链表 //head2,p2,pre2为偶数值结点链表 //两个链表的操作类似struct ListNode *readlist()函数 struct ListNode *head1 = NULL, *head2 = NULL, *p1, *p2, *pre1, *pre2; while (*L) { //逐个读取链表所有结点 if ((*L)->data % 2) { //奇数值 p1 = (struct ListNode *) malloc(sizeof(struct ListNode)); p1->data = (*L)->data; p1->next = NULL; if (head1 == NULL) head1 = p1; else pre1->next = p1; pre1 = p1; } else { //偶数值 p2 = (struct ListNode *) malloc(sizeof(struct ListNode)); p2->data = (*L)->data; p2->next = NULL; if (head2 == NULL) head2 = p2; else pre2->next = p2; pre2 = p2; } *L = (*L)->next;//读取下一个结点 } *L = head2;//将L中存储的地址改为删除了奇数值结点后的链表的头结点地址 return head1;//返回指向新链表头结点的指针}
转载地址:https://blog.csdn.net/zxc0074869/article/details/115208700 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月07日 05时11分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
什么?电路板上还要喷漆?
2019-04-29
读博读废了是种什么样的体验?
2019-04-29
2020年,技术圈十大“翻车”事件!
2019-04-29
C语言状态机编程思想
2019-04-29
为什么很多电器设备都要使用单片机?
2019-04-29
在中国做操作系统研发 20 年是种什么体验?
2019-04-29
PCB走线角度为90度到底行不行?
2019-04-29
这个 17 岁的黑客天才,破解了第一代 iPhone!
2019-04-29
在STM32价格疯长下,哪些国产32可以替代?
2019-04-29
半导体芯片原厂涨价及调价声明新增了这些!
2019-04-29
为什么你学C++这么难?
2019-04-29
无人机破巡检难题,秒变电网卫士
2019-04-29
五年,我成为了一名嵌入式工程师。
2019-04-29
2020年电赛题目,命题专家们怎么看?
2019-04-29
PCB元器件摆放不可忽略的10个技巧
2019-04-29
掌握AI核心技术没有秘籍,能自己创造就是王道
2019-04-29
大学老师的月薪多少?实话实说:4万多一点……
2019-04-29
2020年电赛题目,命题专家权威解析!
2019-04-29
如何掌握“所有”的程序语言?没错,就是所有!
2019-04-29
39岁单身程序员入住养老院
2019-04-29