力扣面试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;
    }
}
相关推荐
流年如夢20 小时前
单链表Ⅲ(LeetCode)
数据结构·算法·leetcode·职场和发展
阿苟20 小时前
spring重点详解
java·后端·面试
一只叫煤球的猫20 小时前
用AI写业务代码后,必须要坚持自己做的几件事情——过程控制
面试·ai编程·vibecoding
我叫黑大帅21 小时前
PyScript-GitHubRepo: 构建高性能GitHub仓库批量下载工具的技术实践
后端·python·面试
mask哥1 天前
力扣算法java实现汇总整理(下)
java·算法·leetcode
样例过了就是过了1 天前
LeetCode热题100 编辑距离
数据结构·c++·算法·leetcode·动态规划
khalil10201 天前
代码随想录算法训练营Day-46 动态规划13 | 647. 回文子串、516.最长回文子序列、动态规划总结
数据结构·c++·算法·leetcode·动态规划·回文子串·回文子序列
he___H1 天前
算法快与慢--哈希+双指针
算法·leetcode·哈希算法
Raink老师1 天前
用100道题拿下你的算法面试(链表篇-4):合并 K 个有序链表
算法·链表·面试
风止何安啊1 天前
手写 URL 解析器,面试官到底想考什么?
前端·javascript·面试