力扣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;
 }
}
相关推荐
用户61204149221321 分钟前
使用JSP+Servlet+JavaBean做的课程后台管理系统
java·javascript·mysql
乌暮28 分钟前
数据库--JDBC编程
java·数据库·学习
磊-30 分钟前
数组双指针总结
数据结构·算法
小白黑科技测评43 分钟前
2025 年视频去水印工具实测:擦擦视频双版本解析一键去字幕与多格式兼容能力
java·人工智能·音视频·智能电视·1024程序员节
华仔啊1 小时前
Go 语言未来会取代 Java 吗?别争了,先看完这篇再说
java·后端·go
多多*1 小时前
Spring Bean的生命周期 第二次思考
java·开发语言·rpc
.小小陈.1 小时前
链表算法题
数据结构·算法·链表
大飞pkz1 小时前
【算法】排序算法汇总1
开发语言·数据结构·算法·c#·排序算法
前端小L1 小时前
单调栈的“降维打击”:从直方图到矩阵——再探「最大矩形」
数据结构·算法
小丁努力不焦虑1 小时前
c++基本语法
java·c++·算法