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;
        
    }
}
相关推荐
依_旧18 小时前
MySQL下载安装配置(超级超级入门级)
java·后端
淘源码d18 小时前
什么是医院随访系统?成熟在用的智慧随访系统源码
java·spring boot·后端·开源·源码·随访系统·随访系统框架
laocooon52385788618 小时前
C语言 有关指针,都要学哪些内容
c语言·数据结构·算法
程序猿阿越18 小时前
Kafka源码(七)事务消息
java·后端·源码阅读
m0_7482480219 小时前
C++20 协程:在 AI 推理引擎中的深度应用
java·c++·人工智能·c++20
笑我归无处19 小时前
强引用、软引用、弱引用、虚引用详解
java·开发语言·jvm
02苏_19 小时前
秋招Java面
java·开发语言
爱吃甜品的糯米团子19 小时前
详解 JavaScript 内置对象与包装类型:方法、案例与实战
java·开发语言·javascript
liu****19 小时前
11.Linux进程信号(三)
linux·运维·服务器·数据结构·1024程序员节
程序定小飞19 小时前
基于springboot的学院班级回忆录的设计与实现
java·vue.js·spring boot·后端·spring