单链表操作2-单链表A拆分成奇数和偶数值单链表B和C(个人学习笔记,仅供参考)
单链表A拆分成奇数和偶数值单链表B和C
- 题目要求
- 单链表结点定义
- 函数接口定义
- 测试程序样例
- 输入样例
- 输出样例
- 答案
题目要求
在一个带头结点的单链表A中,头指针为a,设计算法SplitList ( )将A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值为奇数的结点,
而C表的结点为A表中值为偶数的结点(链表A的元素类型为整型,要求B、C表除了头结点可以新开辟空间外,其余结点均利用A表的结点,不得申请新的结点空间)最后要求遍历B,C链表。
单链表结点定义
带头结点的单链表结点定义如下:
typedef int DataType;
typedef struct Node
{DataType data; // data域用于存储数据元素
struct Node *next; // next域用于存放指向其后继的指针
}LNode, *PNode, *LinkList; // LinkList为头指针
函数接口定义
函数接口如下:
void SplitList( LinkList a , LinkList *b , LinkList *c );
其中 a ,*b , *c都是用户传入的参数。 a是原始链表A的头指针,b和c是新链表B和C的头指针。
测试程序样例
#include <stdio.h>
#include <stdlib.h>int InitLinkList(LinkList *head); /* 初始化链表, 细节在此不表 */
PNode LinkListInsert(LinkList h, int pos, DataType x) ; /* 向链表插入新元素,返回新插入链点的指针,细节在此不表 */
void TraverseLinkList(LinkList h); /* 遍历单链表,细节在此不表 */
void DestroyLinkList(LinkList h); /* 销毁单链表,细节在此不表 */
int BnotinA(LinkList a ,LinkList b); /* 判定B中的链点是否来自于A ,如果链点来自A,则返回1,否则返回0,细节在此不表 */void SplitList( LinkList a , LinkList *b , LinkList *c ); /* 本题要求函数 */int main()
{LinkList aa,bb,cc;DataType x;char ch;int pos = 1;InitLinkList(&aa);InitLinkList(&aa1);InitLinkList(&bb);InitLinkList(&cc);do{scanf("%d",&x);LinkListInsert( aa , pos++ , x );if (pa!=NULL){LinkListInsert(aa1, pos, (DataType)pa);}}while ((ch=getchar())!='\n');SplitList( aa , &bb , &cc );if ( (bb->next == NULL && BnotinA(aa1,cc)!=1 ) || ( cc->next == NULL && BnotinA(aa1,bb)!=1 ) ){printf("单链表B和C的链点来自于单链表A!\n");}else if ( ( BnotinA(aa1,bb) != 1 ) && ( BnotinA(aa1,cc) != 1 ) ){printf("单链表B和C的链点来自于单链表A!\n");}printf("单链表B是: \n");TraverseLinkList( bb );printf("单链表C是: \n");TraverseLinkList( cc );DestroyLinkList(aa);DestroyLinkList(bb);DestroyLinkList(cc);return 0;
}
输入样例
在这里给出一组输入。例如:
12 -9 45 87 -32 64 28 49 34 -42
输出样例
在这里给出相应的输出。例如:
单链表B和C的链点来自于单链表A!
单链表B是
-9 45 87 49
单链表C是
12 -32 64 28 34 -42
答案
void SplitList( LinkList a , LinkList *b , LinkList *c )
{PNode p = a->next; //遍历链点指针PNode b_taill = *b; //链表B尾指针PNode c_taill = *c; //链表C尾指针while (p){a->next = p->next;p->next = NULL;if (p->data % 2 == 0){c_taill->next = p; //挂尾c_taill = p; //尾结点后移}else{b_taill->next = p; //挂尾b_taill = p; //尾结点后移}p = a->next; //链表A指针后移循环}
}
数据结构学习中,个人笔记,仅供参考
如有错误,烦请指正
参考视频: 【LinkList2-单链表A拆分成奇数值和偶数值链表B和C】
单链表操作2-单链表A拆分成奇数和偶数值单链表B和C(个人学习笔记,仅供参考)相关推荐
- 单链表操作10-带头结点的单链表逆置(个人学习笔记,仅供参考)
带头结点的单链表逆置 题目要求 单链表结点定义 函数接口定义 测试程序样例 输入样例 输出样例 答案 题目要求 设计算法Reverse( ),将带头结点的单链表A逆置,要求利用原有链表的链点,最后输出 ...
- 链表知识体会总结(仅供参考)
仅供参考: 链表分单向,双向,循环三种. 链表的基本操作包括:顺序建表,逆建,结点插入,删除,链表的合并,拆分等. 顺建:需要定义三个结构体指针***head, t, p.申请头结点head----h ...
- 400分单招计算机,湖南单招最火爆的专科学校(适合400分以上,仅供参考)
原标题:湖南单招最火爆的专科学校(适合400分以上,仅供参考) 1.湖南交通职业技术学院,路桥工程系.工程经济系.建筑工程系.交通信息系.汽车工程系.机电工程系.物流管理系.商贸旅游系.该学校以交通专 ...
- 操作系统P,V(wait,signal原语)操作讲解,以及两个例题(答案仅供参考)
操作系统的pv操作是很核心的概念. 临界区 : 我们把并发进程中与共享变量有关的程序段称为临界区. 信号量 : 信号量的值与相应资源的使用情况有关.当它的值大于0时,表示当前可用资源的数量:当它的值小 ...
- 初识数据结构:链表实现图书信息管理系统(C语言,仅供参考)
目录 1.创建表结构 2.创建表 3.打印链表 4.查找功能的实现 5.插入功能的实现 6.删除功能的实现 7.修改功能的实现 8.计数功能的实现 9.排序功能的实现 10.封装图书信息管理系统 1. ...
- 程序员必读书单 (仅供参考)
转载:http://zh.lucida.me/blog/developer-reading-list/ 程序员必读书单 1.0 发表于 2015-02-25 | 分类于 阅读 | ...
- 淘宝补单的一些见解和经验分享,仅供参考
一.补单的概念 有些新手卖家听到补单就谈虎色变,首先要把概念转化过来. 补单是什么,它只是一种违规的运营手段,我把补单比喻成过马路,你不补单就在原地等红灯.补单的人就是在闯红灯,被抓到了的人重新换一个 ...
- linux文件系统扩容操作步骤,仅供参考
1.查看/opt/aspire/product/ess/apache-tomcat-ess/webapps/doc文件系统使用率为91%,需要扩容[root@CMDI-DZQZ-Svr /]# df ...
- 单链表 操作的18种算法
#include "stdafx.h" #include "stdio.h" #include <stdlib.h> #include " ...
最新文章
- 【原创】用MySQL 生成随机密码-增加大写处理
- python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)
- 超全面的freemarker教程
- python 在不同层级目录import 模块的方法
- libcareplus多补丁管理
- 使用Directory.EnumerateFiles进行批处理
- 进程和线程不属于标准c语言,经典C语言面试题6:进程与线程的关系和区别
- 【leetcode】给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff数对。
- 罗技G304鼠标的按键宏定义
- AlterID.exe 报错问题
- 关于计算机中的编码问题: ASC2/ Unicode/ Utf-8
- mac 上装windows系统 win10 没声音 耳机也没声音
- 科技圈以 A 取名的时尚潮流
- linux桌面网络连接是个X,Xbrowser如何运行多个X桌面
- unity2018转微信小游戏不显示图片
- 【JAVA长虹键法】第一式 初识设计模式(23种设计模式)
- 记一次小米手机安装Google Play(其他手机类似)
- laravel Helpers文件 通用帮助函数 以及常用帮助方法
- R语言|如何进行t检验
- 山东省出台《意见》配置公共体育设施
热门文章
- Waymo – 旨在将第 5 代硬件的优势带入卡车运输
- 电商行业防御黑客攻击解决方案
- mysql select 常量列_不使用临时表,仅使用select实现查询出多行常数
- 对输入法中全角半角和中英文输入法的理解
- (原創) 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
- 1、WebApi简介
- 鸿蒙生态班腾讯网,华为与西北工业大学达成合作,设立鸿蒙生态班
- 内容匹配广告投放技术5:品牌展示广告(一)(百度文库课程)
- 和阿文一起学H5——如何搜到超酷的GIF素材
- 【Day16 文献泛读】Do monkeys think in metaphors? Representations of space and time in monkeys and humans