2025年- H118-Lc86. 分隔链表(链表)--Java版

1.题目

2.思路

首先维护两个链表,一个链表存储小于x的数,另一个链表存储大于x的数。然后再用小链表的最后一个数指向大链表的第一个数,大链表的最后一个数指向NULL。

创建两个虚拟头结点分别指向小链表的第1个节点和大链表的最后一个节点。

largehead不变的,暂存了大链表的头结点。smallhead不变的,暂存了小链表的头结点

3.代码实现

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 small=new ListNode(0);
        ListNode smallHead=small;
        ListNode large=new ListNode(0);
        ListNode largeHead=large;
        //如果头结点不为空
        while(head!=null)
        {
          if(head.val<x)
          {
            //小链表虚拟头结点的下一个数指向小链表的头结点
            small.next=head; //1=1
            small=small.next;//small=
          }else
          {large.next=head;
            //大链表的虚拟头结点的下一个数 指向大链表的头结点
            large=large.next;

          }
          //如果数顺序排序的,head指针后移
          head=head.next;
        }
        //最后重新链接一下大链表和小链表
        //大链表的最后一个节点的下一个数指向空
        large.next=null;

        //小链表的最后一个结点的下一个数指向大链表的第一个数
        //largehead不变的,暂存了大链表的头结点
        small.next=largeHead.next;

        //返回小链表的第一个数,smallhead不变的,暂存了小链表的头结点
        return smallHead.next;
        
    }
}
相关推荐
devilnumber4 小时前
Java 递归算法 详解 + 核心要点 + 实战运用 + 避坑指南
java·开发语言·算法
asdfg12589636 小时前
JavaBean是什么?怎么理解?有什么用途?
java·开发语言
摇滚侠8 小时前
SpringMVC 入门到实战 文件上传 75-77
java·后端·spring·maven·intellij-idea
GIS数据转换器8 小时前
城市排水生命线安全运行监测平台深度解析
java·运维·人工智能·python·安全·数据挖掘·无人机
华如锦8 小时前
面了很多 Java转AI Agent方向,一些面试题总结
java·开发语言·人工智能·python·ai
睡不醒男孩0308238 小时前
CLup 6.x 版本中针对StarRocks 存算一体集群的完整操作手册
java·服务器·网络·clup
退休倒计时8 小时前
【每日一题】LeetCode 53. 最大子数组和 TypeScript
数据结构·算法·leetcode·typescript
2601_961875249 小时前
法考资料2026|全套|资料已整理
数据结构·算法·链表·贪心算法·eclipse·线性回归·动态规划
程序员黑豆9 小时前
Java中怎么实现字符串拼接呢【AI全栈开发】
java