LeetCode | 面试题 02.04. 分割链表

简介: LeetCode | 面试题 02.04. 分割链表

LeetCode | 面试题 02.04. 分割链表

OJ链接

简单的做法:

  • 创建两个带头空链表,大链表和小链表,最后小链表的尾结点和大链表的头结点连接起来

代码如下:

typedef struct ListNode ListNode;
struct ListNode* partition(struct ListNode* head, int x){
    if(head == NULL)
        return head;
    //创建带头的大小链表
    ListNode* lessHead,*lessTail;
    ListNode* greaterHead,*greaterTail;
    //创建大小链表的哨兵位
    lessHead = lessTail = (ListNode*)malloc(sizeof(ListNode));
    greaterHead = greaterTail = (ListNode*)malloc(sizeof(ListNode));
    //遍历链表,将节点放到大小链表中
    ListNode* cur = head;
    while(cur)
    {
        if(cur->val < x)
        {
            //放到小链表中
            lessTail->next = cur;
            lessTail = lessTail->next;
        }
        else
        {
            //放到大链表中
            greaterTail->next = cur;
            greaterTail = greaterTail->next;
        }
        cur = cur->next;
    }
    if(greaterTail)
        greaterTail->next = NULL;
    //小链表的尾和大链表的头连接起来
    lessTail->next = greaterHead->next;
    //把动态开辟的空间连接起来
    free(greaterHead);
    ListNode* retHead = lessHead->next;
    free(lessHead);
    return retHead;
}
相关文章
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
234 1
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
280 0
Leetcode第21题(合并两个有序链表)
|
Go
【LeetCode 热题100】DP 实战进阶:最长递增子序列、乘积最大子数组、分割等和子集(力扣300 / 152/ 416 )(Go语言版)
本文深入解析三道经典的动态规划问题:**最长递增子序列(LIS)**、**乘积最大子数组** 和 **分割等和子集**。 - **300. LIS** 通过 `dp[i]` 表示以第 `i` 个元素结尾的最长递增子序列长度,支持 O(n²) 动态规划与 O(n log n) 的二分优化。 - **152. 乘积最大子数组** 利用正负数特性,同时维护最大值与最小值的状态转移方程。 - **416. 分割等和子集** 转化为 0-1 背包问题,通过布尔型 DP 实现子集和判断。 总结对比了三题的状态定义与解法技巧,并延伸至相关变种问题,助你掌握动态规划的核心思想与灵活应用!
465 1
|
算法 Go
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 23——合并 K 个升序链表的两种解法:优先队列(最小堆)和分治合并。题目要求将多个已排序链表合并为一个升序链表。最小堆方法通过维护节点优先级快速选择最小值,;分治合并则采用归并思想两两合并链表。文章提供了 Go 语言实现代码,并对比分析两种方法的适用场景,帮助读者深入理解链表操作与算法设计。
483 10
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
223 0
LeetCode第二十四题(两两交换链表中的节点)
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
291 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
359 0
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
186 0
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?