LeetCode 86 Partition List 分区链表 Java

**题目:**给定一串链表的起始节点head和一个数值x,将链表中所有比X值小的节点放在比X值大的节点的前面,除此之外,要求保持原有的节点排序不变。

例子:

举例1:

输入 :head = [1,4,3,2,5,2], x = 3;

输出 :[1,2,2,4,3,5 ];

举例2:

输入:head = [2,1], x = 2

输出:[1,2]

解题思路:

创建两个链表,分别存储比x小的节点和大于等于x的节点,然后将两个链表重新拼接在一起

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode lessListHead = new ListNode(0);
        ListNode greaterListHead = new ListNode(0);
        ListNode lessListCurrect = lessListHead;
        ListNode greaterListCurrect = greaterListHead;

        //遍历head链表,将head中值比x小的节点放入小的链表中,反之放入另一个链表中
        while (head != null) {
            if (head.val < x) {
                lessListCurrect.next = head;
                lessListCurrect = lessListCurrect.next;
            } else {
                greaterListCurrect.next = head;
                greaterListCurrect = greaterListCurrect.next;
            }
            head = head.next;
        }

        //拼接两个链表
        greaterListCurrect.next = null;
        lessListCurrect.next = greaterListHead.next;

        return lessListHead.next;
    }
}
相关推荐
ShadowSmartMicros3 分钟前
SpringAi调用Mcp
java·ai
MediaTea3 分钟前
思考与练习(第四章 程序组成与输入输出)
java·linux·服务器·前端·javascript
松涛和鸣6 分钟前
35、Linux IPC进阶:信号与System V共享内存
linux·运维·服务器·数据库·算法·list
kong79069286 分钟前
Java新特性-(四)方法与数组
java·数组·方法
麦麦鸡腿堡10 分钟前
Java_反射暴破创建对象与访问类中的成员
java·开发语言
大海星辰79811 分钟前
工厂模式与策略模式的深度实践:从代码优化到架构思考
java·架构·策略模式
LYFlied12 分钟前
【每日算法】LeetCode 114. 二叉树展开为链表:从树结构到线性结构的优雅转换
数据结构·算法·leetcode·链表·面试·职场和发展
Jack_abu12 分钟前
详解java中的线程间协作工具:CountDownLatch,Semaphore,CyclicBarrier(二)
java·并发编程·juc
miss_you121326 分钟前
结算模块设计
java
派大鑫wink28 分钟前
【Day1】Java 入门:开发环境搭建(JDK 安装 + IDEA 配置 + HelloWorld 实战)
java·开发语言·intellij-idea