力扣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;
 }
}
相关推荐
phltxy14 小时前
算法刷题|模拟思想高频题全解(Java版)
java·开发语言·算法
wuyikeer14 小时前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
C雨后彩虹14 小时前
深入探索Java Stream:6个复杂业务场景下的高效实现方案
java·多线程·stream·同步·异步
宵时待雨14 小时前
C++笔记归纳10:继承
开发语言·数据结构·c++·笔记·算法
田梓燊14 小时前
最长的连续序列到底怎么写
算法·哈希算法·散列表
smchaopiao14 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
一叶落43814 小时前
LeetCode 21. 合并两个有序链表(C语言详解 | 链表经典题)
c语言·数据结构·c++·算法·leetcode·链表
挠头猴子14 小时前
c++中常用的运算符优先级
java·开发语言·c++
阿里嘎多哈基米14 小时前
速通Hot100-Day04——哈希
数据结构·算法·leetcode·哈希算法·散列表
清空mega14 小时前
第3章:JSP 基础语法——<% %>、<%= %>、<%! %> 到底怎么用
java·开发语言