单链表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(个人学习笔记,仅供参考)相关推荐

  1. 单链表操作10-带头结点的单链表逆置(个人学习笔记,仅供参考)

    带头结点的单链表逆置 题目要求 单链表结点定义 函数接口定义 测试程序样例 输入样例 输出样例 答案 题目要求 设计算法Reverse( ),将带头结点的单链表A逆置,要求利用原有链表的链点,最后输出 ...

  2. 链表知识体会总结(仅供参考)

    仅供参考: 链表分单向,双向,循环三种. 链表的基本操作包括:顺序建表,逆建,结点插入,删除,链表的合并,拆分等. 顺建:需要定义三个结构体指针***head, t, p.申请头结点head----h ...

  3. 400分单招计算机,湖南单招最火爆的专科学校(适合400分以上,仅供参考)

    原标题:湖南单招最火爆的专科学校(适合400分以上,仅供参考) 1.湖南交通职业技术学院,路桥工程系.工程经济系.建筑工程系.交通信息系.汽车工程系.机电工程系.物流管理系.商贸旅游系.该学校以交通专 ...

  4. 操作系统P,V(wait,signal原语)操作讲解,以及两个例题(答案仅供参考)

    操作系统的pv操作是很核心的概念. 临界区 : 我们把并发进程中与共享变量有关的程序段称为临界区. 信号量 : 信号量的值与相应资源的使用情况有关.当它的值大于0时,表示当前可用资源的数量:当它的值小 ...

  5. 初识数据结构:链表实现图书信息管理系统(C语言,仅供参考)

    目录 1.创建表结构 2.创建表 3.打印链表 4.查找功能的实现 5.插入功能的实现 6.删除功能的实现 7.修改功能的实现 8.计数功能的实现 9.排序功能的实现 10.封装图书信息管理系统 1. ...

  6. 程序员必读书单 (仅供参考)

    转载:http://zh.lucida.me/blog/developer-reading-list/ 程序员必读书单 1.0 发表于 2015-02-25    |   分类于 阅读    |   ...

  7. 淘宝补单的一些见解和经验分享,仅供参考

    一.补单的概念 有些新手卖家听到补单就谈虎色变,首先要把概念转化过来. 补单是什么,它只是一种违规的运营手段,我把补单比喻成过马路,你不补单就在原地等红灯.补单的人就是在闯红灯,被抓到了的人重新换一个 ...

  8. linux文件系统扩容操作步骤,仅供参考

    1.查看/opt/aspire/product/ess/apache-tomcat-ess/webapps/doc文件系统使用率为91%,需要扩容[root@CMDI-DZQZ-Svr /]# df ...

  9. 单链表 操作的18种算法

    #include "stdafx.h" #include "stdio.h" #include <stdlib.h> #include " ...

最新文章

  1. 【原创】用MySQL 生成随机密码-增加大写处理
  2. python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)
  3. 超全面的freemarker教程
  4. python 在不同层级目录import 模块的方法
  5. libcareplus多补丁管理
  6. 使用Directory.EnumerateFiles进行批处理
  7. 进程和线程不属于标准c语言,经典C语言面试题6:进程与线程的关系和区别
  8. 【leetcode】给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff数对。
  9. 罗技G304鼠标的按键宏定义
  10. AlterID.exe 报错问题
  11. 关于计算机中的编码问题: ASC2/ Unicode/ Utf-8
  12. mac 上装windows系统 win10 没声音 耳机也没声音
  13. 科技圈以 A 取名的时尚潮流
  14. linux桌面网络连接是个X,Xbrowser如何运行多个X桌面
  15. unity2018转微信小游戏不显示图片
  16. 【JAVA长虹键法】第一式 初识设计模式(23种设计模式)
  17. 记一次小米手机安装Google Play(其他手机类似)
  18. laravel Helpers文件 通用帮助函数 以及常用帮助方法
  19. R语言|如何进行t检验
  20. 山东省出台《意见》配置公共体育设施

热门文章

  1. Waymo – 旨在将第 5 代硬件的优势带入卡车运输
  2. 电商行业防御黑客攻击解决方案
  3. mysql select 常量列_不使用临时表,仅使用select实现查询出多行常数
  4. 对输入法中全角半角和中英文输入法的理解
  5. (原創) 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
  6. 1、WebApi简介
  7. 鸿蒙生态班腾讯网,华为与西北工业大学达成合作,设立鸿蒙生态班
  8. 内容匹配广告投放技术5:品牌展示广告(一)(百度文库课程)
  9. 和阿文一起学H5——如何搜到超酷的GIF素材
  10. 【Day16 文献泛读】Do monkeys think in metaphors? Representations of space and time in monkeys and humans