力扣面试150 分隔链表 模拟

Problem: 86. 分隔链表

👨‍🏫 参考题解

Code

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) {
        // 创建两个哑节点,用于存储小于x和大于等于x的节点
        ListNode small = new ListNode(0);
        ListNode smallHead = small; // small链表的头指针
        ListNode large = new ListNode(0);
        ListNode largeHead = large; // large链表的头指针

        // 遍历原始链表
        while (head != null) {
            if (head.val < x) {
                // 如果当前节点值小于x,将该节点连接到small链表
                small.next = head;
                small = small.next; // 更新small指针到当前节点
            } else {
                // 如果当前节点值大于等于x,将该节点连接到large链表
                large.next = head;
                large = large.next; // 更新large指针到当前节点
            }
            // 移动到下一个节点
            head = head.next;
        }

        // large链表的最后一个节点需要指向null,以防止形成循环链表
        large.next = null;

        // 将small链表的最后一个节点指向large链表的头节点
        small.next = largeHead.next;

        // 返回small链表的头节点,即分隔后的新链表的头节点
        return smallHead.next;
    }
}
相关推荐
exe4521 小时前
力扣每日一题5-18
java·算法·leetcode
Sonetto19992 小时前
【Python】【面试凉经】Fastapi为什么Fast
python·面试·flask·fastapi·凉经
阳洞洞2 小时前
leetcode 74. Search a 2D Matrix
leetcode·二分查找
YuforiaCode2 小时前
LeetCode 219.存在重复元素 II
算法·leetcode·职场和发展
小雅痞2 小时前
[Java][Leetcode middle] 151. 反转字符串中的单词
java·leetcode
飞川撸码12 小时前
【LeetCode 热题100】739:每日温度(详细解析)(Go语言版)
算法·leetcode·golang
冬瓜的编程笔记13 小时前
【八股战神篇】MySQL高频面试题
数据库·mysql·面试
独行soc13 小时前
2025年渗透测试面试题总结-百度面经(题目+回答)
运维·开发语言·经验分享·学习·面试·渗透测试·php
编程、小哥哥14 小时前
Java大厂面试:从Web框架到微服务技术的场景化提问与解析
java·spring boot·微服务·面试·技术栈·数据库设计·分布式系统
小学生的信奥之路15 小时前
力扣1991:找到数组的中间位置(前缀和)
数据结构·算法·leetcode·前缀和·数组