解题思路:将一个链表分成三个链表,最后重新连接三个链表
(1)分成三个链表的过程是一致的:以左小链表为例依次遍历原链表的每一个节点cur,当cur->data<pivot时,把cur取出,
添加到左小链表末尾,直到遍历完整个原链表为止。
(2)生成左小、中相等、右大链表后,怎么连接三个链表并返回头结点是难点!(因为不知道三个链表是否为空)
#include<iostream>
using namespace std;typedef struct TNode
{int data;struct TNode* next;
}TNode;TNode* createL(int n) //创建链表
{TNode* head = NULL;TNode* tial = NULL;for (int i = 0; i < n; i++){TNode* node = new TNode;node->next = NULL;cout << "请输入";cin >> node->data;if (head == NULL){head = node;tial = head;}else{tial->next = node;tial = node;}}tial->next = NULL;return head;
}void travel(TNode* head)
{cout << "输出结果:" << endl;TNode* p = head;while (p != NULL){cout << p->data << endl;p = p->next;}
}TNode* listPartition(TNode* head, int pivot) //链表划分
{TNode* sh = NULL;TNode* st = NULL;TNode* eh = NULL;TNode* et = NULL;TNode* bh = NULL;TNode* bt = NULL;//依次遍历每一个元素TNode* cur = head;TNode* s = NULL;  //辅助变量,用于保存cur节点的下一个节点,防止断链while (cur != NULL){s = cur->next;cur->next = NULL;//将当前结点cur的指针域设为空,保证每个链表的新增节点为最后一个节点if (cur->data < pivot){if (sh == NULL){sh = cur;st = cur;}else{st->next = cur;st = cur;}}else if (cur->data == pivot){if (eh == NULL){eh = cur;et = cur;}else{et->next = cur;et = cur;}}else if (cur->data > pivot){if (bh == NULL){bh = cur;bt = cur;}else{bt->next = cur;bt = cur;}}cur = s;}//难点:将三个不知道是否为空链表的链表进行链接成一条链表,返回最终的头结点
//依次从左到右假设每个链表不为空时,尾节点指针域的指向if (st != NULL){st->next = (eh != NULL) ? eh : bh;}if (et != NULL){et->next = bh;}return st != NULL ? sh : et != NULL ? eh : bh;
}
int main()
{TNode* head = NULL;head = createL(7);travel(head);head = listPartition(head, 3);travel(head);return 0;
}

链表划分为左小、中相等、右大相关推荐

  1. python 输出文字_Python中输出ASCII大文字、艺术字、字符字小技巧

    复制代码 代码如下: display text in large ASCII art fonts 显示大ASCII艺术字体 这种东西在源码声明或者软件初始化控制台打印时候很有用. 例如下图: 这是查看 ...

  2. 求两个数中的较大(小)值

    输入两个数,(以整数为例)  输出这两个数中的较大(小)值 我调用一个函数 用到了三目运算符 求两个数的较大值时 有 max函数和 MAX 函数 先看max函数 int max(int a, int ...

  3. C++11中的右值引用

    http://www.cnblogs.com/yanqi0124/p/4723698.html 在C++98中有左值和右值的概念,不过这两个概念对于很多程序员并不关心,因为不知道这两个概念照样可以写出 ...

  4. 浅谈软件编程中的8大数据结构

    文章目录 前言 一.为什么要研究数据结构 二.数据结构的分类 1.数组(Array) 2.链表(Linked List) 3.队列(Queue) 4.栈(Stack) 5.散列表(Hash) 6.树( ...

  5. 小马智行元气大伤,独立自动驾驶公司路在何方?

    NEW 关注Tech逆向思维视频号 最新视频→[男生的秋裤,女生的打底裤,哪个更抗冻?] 出品|连线出行 文 |韩滢 编辑 |李信 "你能不能帮我打造一款在加州任何道路上都能自由行驶的自动驾 ...

  6. java实现简单窗体小游戏----球球大作战

    java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: ​ 坐标.大小.颜色.方向.速度 2.抽象类:Ball ​ 设计类:BallMain-创建窗体 ​ BallJPanel- ...

  7. java add offer_图解Java中的5大队列!(干货收藏)

    Java 中的队列有很多,例如:ArrayBlockingQueue.LinkedBlockingQueue.PriorityQueue.DelayQueue.SynchronousQueue等,那它 ...

  8. MapReduce将小文件合并成大文件,并设置每个切片的大小的案例

    测试代码: package cn.toto.bigdata.combinefile;import java.io.IOException;import org.apache.hadoop.conf.C ...

  9. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)

    原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...

最新文章

  1. Python 中的 eavl() 函数
  2. php - 数组倒序
  3. [转载]什么情况下应该设置 cudnn.benchmark = True?
  4. python统计分析 --- 1.方差分析、t检验
  5. Android之ActivityManager与Proxy模式的运用
  6. 对于我这个软妹子来说,为什么python编程课会越学越有趣呢?
  7. eplan安装提示没有安装许可语言_CAD和EPLAN!电气制图你会选择哪个?
  8. 如何实现一张图片覆盖窗体 - 回复 客栈老人 的问题
  9. 使用GDB进行调试 -- 1 应用场景
  10. [导入]在windows下建立的自己cvsnt服务器
  11. android游戏存档在哪里,网易安卓模拟器游戏存档在哪个文件夹的详细解析
  12. cad转excel插件c2e_cad表格转换器2016
  13. Cousera吴恩达机器学习week7笔记
  14. 简单三招,教你做个app
  15. BeautifulSoup及爬取豆瓣评论
  16. win10系统找不到telnet服务器,大神解答win10系统找不到Telnet服务的办法
  17. Qt如何支持高分辨率屏幕(高分屏)
  18. 回车符,换行符与'\0'
  19. DRM系列(11)之VIV IOCTLS
  20. 演示程序之打游戏 -- 慕司板IAP15

热门文章

  1. 【机器学习PAI实践八】用机器学习算法评估学生考试成绩
  2. Python知识图谱
  3. Flume日志收集系统架构详解--转
  4. java原子操作的实现原理--转载
  5. spring mvc DispatcherServlet详解之三---request通过ModelAndView中获取View实例的过程
  6. 数学建模学习笔记——微分方程建模
  7. 人工智能产品化的关键是基础架构和数据,而非算法
  8. 使用文本挖掘实现站点个性化推荐
  9. 编写测试用例的方法_适合小白的测试用例编写方法,一看就会!
  10. Redis进阶 - Redis主从工作原理详解