面试算法-87-分隔链表

题目

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

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

示例 1:

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

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

java 复制代码
class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        ListNode p1 = dummy;
        ListNode p2 = dummy;
        ListNode p3 = null;
        while (p2 != null) {
            p3 = p2.next;
            if (p3 != null && p3.val < x) {
                if(p1.next == p3){
                    p2 = p3;
                    p1 = p2; 
                }else{
                    p2.next = p3.next;

                    ListNode temp = p1.next;
                    p1.next = p3;
                    p3.next = temp;

                    p1 = p1.next;
                }
            }else{
                p2 = p3;
            }

        }
        return dummy.next;
    }
}
相关推荐
碧海银沙音频科技研究院2 分钟前
DiVE长尾识别的虚拟实例蒸馏方法
arm开发·人工智能·深度学习·算法·音视频
居7然1 小时前
DeepSeek OCR:重新定义AI文档处理的“降本增效”新范式
人工智能·算法·语言模型·自然语言处理·大模型·ocr
while(1){yan}2 小时前
数据结构之堆
数据结构·python·算法
无心水2 小时前
深入Java线程池:BlockingQueue实现全景解析与实战指南
java·后端·面试
Java水解2 小时前
JAVA面试题大全(200+道题目)
java·后端·面试
编程岁月2 小时前
java面试-0305-java线程调度方法?sleep()和wait()区别?
java·开发语言·面试
SleepyWhite0012 小时前
代码随想录Day61|Floyd 算法精讲、A * 算法精讲
算法·floyd算法·astar算法
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 84: 乘积为正数的最长子数组长度
数据结构·算法·leetcode·贪心算法·线性回归·深度优先·动态规划
不是老弟3 小时前
rwqsd
数据结构·c++·算法