力扣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;
 }
}
相关推荐
To_OC9 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
咩咩啃树皮10 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
旖-旎10 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
鱟鲥鳚10 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
To_OC10 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn11 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹11 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
大模型码小白12 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
雪碧聊技术12 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划