题目

给定一个单向链表头节点head,和一个整数pivot。

实现一个调整链表的函数,将链表调整为左部分小于pivot,中间等于,右边大于pivot的。调整后的节点顺序要保持与原链表中节点的先后次序一致。

进阶问题要求时间复杂度仍然为O(N), 额外空间复杂度为O(1)。


思路

进阶解法具体过程如下:

1、将原链表中的所有节点依次分为三个链表,small,equal和big。

链表7->9->1->8->5->2->5, pivot=5
small: 1->2->null
equal: 5->5->null
big: 7->9->8->null

2、将三个链表重新串起来即可

3、整个过程需要注意对null节点的判断和处理。


源码

public class Node{public int value;public Node next;public Node(int data){this.value=data;}
}public Node listPartition2(Node head,int pivot){Node sH=null;//小的头Node sT=null;//小的尾Node eH=null;//中的头Node eT=null;//中的尾Node bH=null;//大的头Node bT=null;//小大的尾Node next=null;//保存下一个节点//所有的节点分进三个链表while(head!=null){next=head.next;head.next=null;if(head.value<pivot){if(sH=null){sH=head;sT=head;}else{sT.next=head;sT=head;}}else if(head.value==pivot){if(eH=null){eH=head;eT=head;}else{eT.next=head;eT=head;}}else{if(bH=null){bH=head;bT=head;}else{bT.next=head;bT=head;}}head=next;}//小的和相等的重新连接if(sT!=null){sT.next=eH;eT=eT==null?sT:eT;}//所有的重新连接if(eT!=null){eT.next=bH;}return sH!=null?sH:eH!=null?eH:bH}

链表问题8——将单向链表按某值划分成左边小、中间相等、右边大的形式(进阶)相关推荐

  1. 链表问题8——将单向链表按某值划分成左边小、中间相等、右边大的形式(初阶)

    题目 给定一个单向链表头节点head,和一个整数pivot. 实现一个调整链表的函数,将链表调整为左部分小于pivot,中间等于,右边大于pivot的.对调整后的节点顺序没有更多的要求 链表9-> ...

  2. [******] 链表问题:将单向链表按某值划分成左边小、中间相等、右边大的形式...

    问题描述 普通问题:给定一个单向链表的头节点head,节点的值类型是整数,再给定一个整数 pivot,实现一个调整链表的函数: 使得左半部分的值都是小于pivot的节点,中间部分都是等于pivot的节 ...

  3. 将单向链表按某值划分成左边小、中间相等、右边大的形式

    C++ 版 /*************************************************************************> File Name: 023. ...

  4. 将单向链表按某值划分成左边小、 中间相等、 右边大的形式~迎娶是挺

    这道题一开始想到的方法可能就是patition方法了,大概思路我说一下,先把这个链表存为数组(说明其空间复杂度为0(1)),然后在对这个数组进行patition,即定义两个指针,一个指向数组的-1位置 ...

  5. 将数组排列成左边小,中间相等,右边大的形式 给定链表节点数组和某个值

    题目出自左程云书 原题是将给定一个链表和一个数,将其排列成左边小, 中间等于,右边大于某个数的形式 解:将链表的节点先存入一个Node数组,将数组排序,再将数组中的链表节点连接起来 以下是节点排序函数 ...

  6. 链表问题4——反转单向链表

    题目 实现反转单向链表的函数 要求 如果链表长度为N,时间复杂度要求为O(N),额外空间复杂度要求为O(1). 源码 public class Node{public int value;public ...

  7. 将单向链表按某值分成左边小、中间相等、右边大的形式

    [题目] 给定一个单向链表的头节点head,节点的值类型是整型,再给定一个 整 数pivot 实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot 的节点,中间部分都是值等于pivot的节 ...

  8. 链表之反转部分单向链表

    package com.chenyu.zuo.linkedList;import com.chenyu.zuo.linkedList.RemoveByRatio.Node;/*** 题目:给定一个单向 ...

  9. 数据结构链表之单向链表:Python3 实现单向链表——1

    Python3 实现单向链表 链表定义与简介 定义:链表与顺序表(Python中列表)性质相反,链表是物理单元上非顺序的.非连续的,在逻辑顺序上其数据元素是通过指针实现的,组成链表的每一个元素也可以叫 ...

最新文章

  1. python-tkinter模块图形分布移动(可键盘操作)
  2. caffe 关于Deconvolution的初始化注意事项
  3. php resque 计划任务,PHP-RESQUE - 实现重试
  4. 敏捷开发用户故事系列之一:何为用户故事
  5. VB.Net + asp.net的一个web系统,使用SQL2000数据库 现在运行时偶尔会出现一个奇怪现象,一个用户登录时,登录后的界面竟然是另一个用户...
  6. Java基础练习题——查找整数
  7. T141基于51单片机出租车计费器公里计数,Proteus设计,keil程序、课题设计
  8. 安卓Autojs逆向破解必备基础smail基础语法
  9. OpenDrive格式高精度地图详细解析及其使用(2.Road道路元素和Lane车道元素)
  10. sklearn:OneHotEncoder的简单用法
  11. [Unity][摄像机视角]多个摄像机之间切换
  12. Camera ITS当中的test_lens_shading_and_color_uniformity测试
  13. RFI射频干扰、谐波、基波
  14. 【web开发 模拟ua调试】修改chrome浏览器的user agent
  15. 计算机表格中的及格率怎么做,【excle表格不及格百分比】如何使用Excel计算优秀、良好、合格、不合格的比例?...
  16. 【转】基于C#的接口基础教程之五(1)
  17. java中10d是什么意思_java程序员面试自我介绍
  18. GSM模块联网 GPRS上传物联网云平台调试笔记
  19. 笔记本电脑一开盖就开机?
  20. 追剧达人观看电影源码

热门文章

  1. 投稿近2000,NAACL 2019接收率仅为22.6%|附录取论文名单
  2. iPhone曝严重漏洞,用户接听FaceTime前或被“监听”!
  3. 人工智能是人性的罗夏测试
  4. 高文院士:顶级AI人才缺乏,但不必搞全民运动,到处成立人工智能学院
  5. Oracle慌了!华为终于对JDK下手了!
  6. 一个基于 Spring Boot 的项目骨架
  7. ​Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类
  8. 机器学习数学基础:随机事件与随机变量
  9. 十年AI谁“最能打”?AI 2000榜单:何恺明最佳论文“刷”状元,谷歌机构排名第一...
  10. OpenAI开放GPT-3微调功能,一行命令就能实现!正确率最高提升4倍