分隔链表

题目描述:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/partition-list/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:链表遍历

声明2个链表lessThan和moreThan分别存放小于x的节点和不小于x的节点,然后2个指针curLess和curMore分别指向lessThan和moreThan的头节点,然后遍历链表head:

  • 如果当前节点小于x,则将当前节点添加到lessThan链表中;
  • 如果当前节点不小于x,则将当前节点添加到moreThan链表中。

链表head遍历完成后,将lessThan和moreThan的尾结点都指向null,避免出现多余的节点,然后将lessThan的尾结点指向moreThan的头结点(即将小于x的节点挪到不小于x的节点的前面),最后返回lessThan的next节点即为最后结果。

public class LeetCode_086 {
public static ListNode partition(ListNode head, int x) {
// 小于x的链表节点
ListNode lessThan = new ListNode(-1);
// 不小于x的链表节点
ListNode moreThan = new ListNode(-1);
ListNode curLess = lessThan, curMore = moreThan;
while (head != null) {
if (head.val < x) {
// 小于x的节点添加到链表lessThan中
curLess.next = head;
curLess = curLess.next;
} else {
// 不小于x的节点添加到链表moreThan中
curMore.next = head;
curMore = curMore.next;
}
head = head.next;
}
// 所有节点遍历完成后将lessThan和moreThan尾结点指向null
curLess.next = null;
curMore.next = null;
// 将小于x的节点挪到不小于x的节点的前面
curLess.next = moreThan.next;
return lessThan.next;
} public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(4);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(2);
head.next.next.next.next = new ListNode(5);
head.next.next.next.next.next = new ListNode(2); ListNode result = partition(head, 3);
while (result != null) {
System.out.print(result.val + " ");
result = result.next;
}
}
}

【每日寄语】 这一生,坎坷太多了,困难也太多了,但人的潜能是无限的,永远不要在困难的时候想这就是自己最困难的时候,只要你咬紧牙根坚持,你的梦想就会成真。

LeetCode-086-分隔链表的更多相关文章

  1. LeetCode 86. 分隔链表(Partition List)

    86. 分隔链表 86. Partition List 题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的 ...

  2. Leetcode 86.分隔链表

    分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1-> ...

  3. Java实现 LeetCode 725 分隔链表(暴力)

    725. 分隔链表 给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分. 每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 nu ...

  4. LeetCode 86. 分隔链表(Partition List)

    题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1-> ...

  5. LeetCode 86 ——分隔链表

    1. 题目 2. 解答 从前向后遍历链表,将结点值小于 x 的结点放入到新链表 1 中,将结点值大于等于 x 的结点放入新链表 2 中.最后,将新链表 2 拼接在新链表 1 后面即可. /** * D ...

  6. 【LeetCode】86. 分隔链表

    86. 分隔链表 知识点:链表: 题目描述 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前. 你应当 保留 两个 ...

  7. LeetCode:分割链表【86】

    LeetCode:分割链表[86] 题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例 ...

  8. LeetCode 328. 奇偶链表(Odd Even Linked List)

    328. 奇偶链表 328. Odd Even Linked List 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是 ...

  9. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...

  10. LeetCode:旋转链表【61】

    LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...

随机推荐

  1. Linux 集群 和免秘钥登录的方法。

    /* 1.1.什么是集群? 很多台服务器(计算机)做相同的事,就称之为集群 服务器和服务器之间必须要处于联通状态(linux01和linux02可以相互访问并且传输数据) 服务器的配置和常见的计算机没 ...

  2. List去重复

    HashSet hs = new HashSet(li1); //此时已经去掉重复的数据保存在hashset中 HashSet不能给cbx.datasource赋值,要转成list再赋值 List t ...

  3. ApacheCN 大数据译文集 20211206 更新

    PySpark 大数据分析实用指南 零.前言 一.安装 Pyspark 并设置您的开发环境 二.使用 RDD 将您的大数据带入 Spark 环境 三.Spark 笔记本的大数据清理和整理 四.将数据汇 ...

  4. SP19149 INS14H - Virus Revisited

    可以发现,如果一个整体一起考虑是不能找到一个合适的状态来描述这个情形的. 因此可以考虑寻找整体的反面,也就是将每个维度分开考虑. 不难发现每个维度本质上是一样的,因此不需要考虑不同维度之间的区别. 那 ...

  5. .exe文件自动重启

    echo  :杀死进程taskkill /f /im YYTWEB.exe  :等待10秒:ping 127.0.0.1 -n 10  start "" "D:\都江堰银 ...

  6. CentOs7.6配置邮件服务并发送邮件

    1.使用Yum 来安装依赖包 yum -y install sendmail yum -y install mailx 2.获取授权码 下面以腾讯为例 https://service.mail.qq. ...

  7. 总结haproxy各调度算法的实现方式及其应用场景

    一.静态算法 1.1 static-rr 基于权重的轮询调度,不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值)及后端服务器慢启动,其后端主机数量没有限制,相当于LVS中的 w ...

  8. Spark算子 - reduce

    释义 reduce将partition内所有记录最终计算成1个记录,结果类型与reduce 时数据类型一致 方法签名如下: def reduce(f: (T, T) => T): T = wit ...

  9. Spring中声明式事务处理和编程式事务处理的区别

    编程式事务:所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理.管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManag ...

  10. visual studio自动向量化

    //////////////////////////////////////////////////*SSE 和 AVX 每个都有16个寄存器SSE 有 XMM0 ~ XMM15,是128bitAVX ...