题目

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

实现一个调整链表的函数,将链表调整为左部分小于pivot,中间等于,右边大于pivot的。对调整后的节点顺序没有更多的要求

链表9->0->4->5->1  pivot=3
调整后:1->0->4->9->5,也可以是0->1->9->5->4与顺序无关

思路

普通解法的时间复杂度为O(N),额外空间复杂度O(N),具体过程如下:

  1. 遍历链表,获得链表长度N
  2. 生成长度为N的Node类型数组nodeArr,再遍历一次链表,并将节点一次放进nodeArr中
  3. 在nodeArr中进行顺序调整
  4. 将nodeArr中节点依次连接

源码

public class Node{public int value;public Node next;public Node(int data){this.value=data;}
}public Node listPartition1(Node head,int pivot){if(head==null){return head;}Node cur=head;int i=0;while(cur!=null){i++;cur=cur.next;}Node[] nodeArr=new Node[i];i=0;cur=head;for(i=0;i!=nodeArr.length;i++){nodeArr[i]=cur;cur=cur.next;}arrPartition(nodeArr,pivot);for(i=1;i!=nodeArr.length;i++){nodeArr[i-1].next=nodeArr[i];}nodeArr[i-1].next=null;return nodeArr[0];
}public void arrPartition(Node[] nodeArr,int pivot){int small=-1;int big=nodeArr.length;int index=0;while(index!=big){if(nodeArr[index].value<pivot){swap(nodeArr,++small,index++);}else if(nodeArr[index].value==pivot){index++;}else{swap(nodeArr,--big,index);}}
}
public void swap(Node[] nodeArr,int a,int b){Node tmp=nodeArr[a];nodeArr[a]=nodeArr[b];nodeArr[b]=tmp;
}

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

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

    题目 给定一个单向链表头节点head,和一个整数pivot. 实现一个调整链表的函数,将链表调整为左部分小于pivot,中间等于,右边大于pivot的.调整后的节点顺序要保持与原链表中节点的先后次序一 ...

  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. java实现人字拼,地板怎么玩花式人字拼铺法 人字拼地板家居实例图
  2. pythorch学习笔记
  3. 使用fastDFS客户端改造文件上传
  4. linux 漏洞 poc,CVE-2017-11176: 一步一步linux内核漏洞利用 (二)(PoC)
  5. 美国影视演员协会选择了Windows Azure
  6. DtCms.ActionLabel.Article.cs
  7. 听说Mutex源码是出名的不好看,我不信,来试一下
  8. wince7 屏幕控制_技术干货:WinCE 7.0下的触摸屏驱动
  9. input和button放在同一行_黑龙江作家协会冯殿波散文集《足音》84情系东保卫,魅力采风行...
  10. bat文件去掉变量 字符串中的空格
  11. android应用安全——数据安全
  12. TCP and UDP
  13. Oracle 10g 数据库连接出现The Network Adapter could not establish the connection解决办法
  14. Win32屏幕保护程序
  15. android 小游戏心得、,滴答滴答:双人故事
  16. 成都-峨眉山(乐山)旅游攻略
  17. MySQL讲义第 43 讲——select 查询之查询练习(一)
  18. Cadence元器件封装库
  19. 微信表情符号写入判决书,你发的OK、炸弹都可能成为“呈堂证供”
  20. 还不懂shell脚本核心?这一篇就够了。

热门文章

  1. 给Chrome“捉虫”16000个,Google开源bug自检工具
  2. 假期快乐!超强面试资源等你Pick,先收藏!
  3. 美媒全球大学排名:清华超麻理跃居计算机专业第一
  4. 阿里发布新工具,直接帮你改代码!网友:工作量又减轻了~
  5. 你在 Docker 中跑 MySQL?恭喜你,可以下岗了!
  6. 直观讲解一下RPC调用和HTTP调用的区别
  7. 一行代码:你的纯文本秒变Markdown
  8. 如何优雅地根治null值引起的Bug!
  9. Redis是如何实现点赞、取消点赞的?
  10. 3名女研究生,状告哈佛!