力扣86.分割链表

复制代码
class Solution {
 public ListNode partition(ListNode head, int x) {
  // 初始化两个链表的头节点和尾节点,分别用于存储小于x和大于等于x的节点
  ListNode leftHead = null, leftTail = null;
  ListNode rightHead = null, rightTail = null;
  // 临时变量,用于遍历原链表
  ListNode next = null;

  // 遍历原链表
  while (head != null) {
   // 保存当前节点的下一个节点
   next = head.next;
   // 断开当前节点与原链表的联系
   head.next = null;

   // 判断当前节点的值是否小于x
   if(head.val < x) {
    // 如果leftHead为空,说明这是第一个小于x的节点,将其设置为leftHead
    if(leftHead == null) {
     leftHead = head;
    }else{
     // 否则将当前节点添加到leftTail后面
     leftTail.next = head;
    }
    // 更新leftTail为当前节点
    leftTail = head;
   }else {
    // 如果rightHead为空,说明这是第一个大于等于x的节点,将其设置为rightHead
    if(rightHead == null) {
     rightHead = head;
    }else{
     // 否则将当前节点添加到rightTail后面
     rightTail.next = head;
    }
    // 更新rightTail为当前节点
    rightTail = head;
   }
   // 移动到下一个节点
   head = next;
  }
  // 如果leftHead为空,说明所有节点都大于等于x,直接返回rightHead
  if (leftHead == null) {
   return rightHead;
  }
  // 将leftTail与rightHead连接起来,形成新的链表
  leftTail.next = rightHead;
  // 返回新链表的头节点
  return leftHead;
 }
}
相关推荐
w_zero_one2 小时前
递归算法(一)
java·开发语言·算法
圣保罗的大教堂2 小时前
leetcode 3736. 最小操作次数使数组元素相等 III 简单
leetcode
SL_staff2 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华2 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊2 小时前
LeetCode1881~1990题目解析
java·leetcode
风影同志783243 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
十碗饭吃不饱3 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
T_Wizard3 小时前
后端转 AI 应用开发,我先把这 12 个名词理清了:一张图看懂架构、RAG、Tool Calling 与 MCP
java·ai编程
杨航 AI3 小时前
JEV的用法
java·前端·数据库
灿飞4 小时前
Kotlin与Java虚拟机七:空安全:把十亿美元的错误消灭在类型系统里
java·kotlin