链表的分化练习题

题目:

对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。

给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。

测试样例:

{1,4,2,5},3
{1,2,4,5}

class Divide {
public:
    ListNode* listDivide(ListNode* head, int val) {
// write code here
    ListNode *lhead=new ListNode(-1);   //按原链表顺序遍历   并将小于等于val值 存在lhead为结点的新链表
    ListNode *rhead=new ListNode(-1);  //                             将大于val值 存在rhead为结点的新链表
    auto p=head;
    auto left=lhead;
    auto right=rhead;

//以下是遍历&分类的过程
    while(p!=NULL){
       if(p->val<=val){
         left->next=p;
         left=p;
       } 
       else{
         right->next=p;
         right=p;
       }
       p=p->next;
   }

left->next=NULL;     //新链表的尾部->NULL
   right->next=NULL;

/*如果lhead链表没有值插入 我们就返回rhead

/  如果有那么就返回lhead

*/

if(lhead->next==NULL){
      rhead=rhead->next;
      return rhead;
   }
   else{
     lhead=lhead->next;
     rhead=rhead->next;
     left->next=rhead;
     return lhead;
   }

}
};

时间: 2024-10-17 23:54:43

链表的分化练习题的相关文章

算法--链表的分化

转载请标明出处http://www.cnblogs.com/haozhengfei/p/c4d685012a2e7a9d2a29531f249be630.html 链表的分化 链表的分化练习 第5节 链表的分化练习题 对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变. 给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复. 测试样例

直通BAT算法精讲附程序源码

课程内容第1章 免费试看2 视频 | 2 练习字符串和二叉树问题免费试看1.1 二叉树打印 免费1.2 二叉树打印练习题 免费1.3 字符串 免费1.4 两串旋转练习题 免费 第2章 排序4 视频 | 16 练习详细介绍常见的排序算法过程,以及各个排序算法稳定性.时间和空间复杂度,当然还有常见面试题目的讲解.2.1 排序(1)2.2 冒泡排序练习题2.3 选择排序练习题2.4 插入排序练习题2.5 归并排序练习题2.6 快速排序练习题2.7 堆排序练习题 免费2.8 希尔排序练习题2.9 排序(

第十章 基本数据结构——链表

 链表 链表与数组的区别是链表中的元素顺序是有各对象中的指针决定的,相邻元素之间在物理内存上不一定相邻.采用链表可以灵活地表示动态集合.链表有单链表和双链表及循环链表.书中着重介绍了双链表的概念及操作,双链表L的每一个元素是一个对象,每个对象包含一个关键字和两个指针:next和prev.链表的操作包括插入一个节点.删除一个节点和查找一个节点,重点来说一下双向链表的插入和删除节点操作,图例如下: 链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就

算法--链表的回文结构

转载请标明出处http://www.cnblogs.com/haozhengfei/p/abb04e825ba4b847dcb704605ea1cd36.html 链表的回文结构 链表回文结构练习 第9节 链表的回文结构练习题 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例: {1,2,3,2,1} 返回:true {1,2,3,2,3} 返回:false Java (javac 1.7) 代码自动补全 1 i

【常用算法思路分析系列】链表相关高频题集

本文是[常用算法思路分析系列]的第四篇,总结链表相关的高频题目和解题思路.本文分析如下几个问题:1.环形链表的差值问题:2.只能访问单个结点的删除问题:3.链表的分化:4.打印两个链表的公共部分:5.把链表的每k个结点逆序:6.删除链表中指定结点:7.判断链表是否为回文结构:8.复杂链表的复制:9.判断链表是否有环:10.判断两个无环链表是否相交:11.判断两个有环链表是否相交:12.判断两个链表(状态未定)是否相交. 本系列前三篇导航: [常用算法思路分析系列]排序高频题集 [常用算法思路分析

两种基本的数据结构

栈的基本操作包括入栈push和出栈pop,栈有一个栈顶指针top,指向最新如栈的元素,入栈和出栈操作操作都是从栈顶端进行的. 队列的基本操作包括入队enqueue和出队dequeue,队列有队头head和队尾tail指针.元素总是从队头出,从队尾入.采用数组实现队列时候,为了合理利用空间,可以采用循环实现队列空间的有效利用. 关于栈和队列的基本操作如下图所示: 采用数组简单实现一下栈和队列,实现队列时候,长度为n的数组最多可以含有n-1个元素,循环利用,这样方便判断队列是空还是满.程序如下所示:

【Java源码解析】-- HashMap源码解析

目录 源码解析 1.构造方法 无参构造方法 int型参数的构造方法 int,float两个参数的构造方法 hsah方法 2.添加元素(put()方法) 3.扩容方法(resize()方法) 4.获取元素(get()方法) 5.移除元素(remove()) 6.树化(treeifyBin()) 关于HashMap常见的问题 1.为什么容量始终是2的幂次? 3.既然红黑树那么好,为啥hashmap不直接采用红黑树,而是当大于等于8个的时候才转换红黑树? 4.JDK1.7 扩容死锁产生原因 5.JDK

【练习题】编写打印出一个单链表的所有元素的程序【链表】

只是实现了链表ADT的部分功能. /*---编写打印出一个单链表的所有元素的程序---*/ #include <stdio.h> #include <stdlib.h> struct Node{ int val; struct Node *next; }; Node *findEnd(Node *list){ while(list->next) list = list->next; return list; } void insert(int val, Node *li

链表经典练习题

总结了编程之美上面关于链表的题目,有不正确的地方,欢迎拍砖,等编程之美看完了,回头刷其他题时遇到链表再补充~ 目录如下(点击展开上面的目录到感兴趣的题目): /************************************************************************/ /*                 链表经典练习题                                               1.从无头链表中删除节点  2.链表逆转  3