面试题 02.04:分割链表

简介: 面试题 02.04:分割链表

题目

题目链接

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你不需要 保留 每个分区中各节点的初始相对位置。

示例 1:

输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

示例 2:

输入:head = [2,1], x = 2
输出:[1,2]

解题

方法一:创建新的链表

创建两个链表,其中一个值小于x,另外一个大于x

最后再将两者进行合并。

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* dummy1=new ListNode(0);
        ListNode* p1=dummy1;
        ListNode* dummy2=new ListNode(0);
        ListNode* p2=dummy2;
        ListNode* cur=head;
        while(cur){
            if(cur->val<x){
                p1->next=cur;
                p1=p1->next;
            }
            else{
                p2->next=cur;
                p2=p2->next;
            }
            cur=cur->next;
        }
        p2->next = nullptr;//必须要加,因为p2接的是cur,而cur可能不只就一个节点
        p1->next=dummy2->next;
        return dummy1->next;
    }
};

方法二:双指针(原地修改)

参考链接

慢指针:修改值,变成小于x的

块指针:遇到小于x的,就和慢指针交换

交换节点,无须节点进行交换,只需要值进行交换就行了

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* slow=head;
        ListNode* fast=head;
        while(fast){
            if(fast->val<x){
                swap(slow->val,fast->val);
                slow=slow->next;
            }
            fast=fast->next;
        }
        return head;
    }
};

相关文章
|
1月前
|
存储 算法 安全
HashMap常见面试题(超全面):实现原理、扩容机制、链表何时升级为红黑树、死循环
HashMap常见面试题:红黑树、散列表,HashMap实现原理、扩容机制,HashMap的jd1.7与jdk1.8有什么区别,寻址算法、链表何时升级为红黑树、死循环
|
1月前
【数据结构】环形、相交、回文、分割、合并、反转链表
【数据结构】环形、相交、回文、分割、合并、反转链表
28 0
|
3月前
|
存储 算法 Python
【面试题】合井K个升序链表
【面试题】合井K个升序链表
35 0
|
3月前
|
存储 Java
【Java集合类面试十】、HashMap中的循环链表是如何产生的?
在多线程环境下,HashMap在扩容时如果发生条件竞争,元素的插入顺序可能形成循环链表,导致死循环。
|
4月前
【数据结构OJ题】链表分割
牛客题目——链表分割
32 0
【数据结构OJ题】链表分割
|
6月前
|
存储 算法 索引
链表面试题
链表面试题
链表面试题
|
5月前
|
存储 SQL 算法
LeetCode 83题:删除排序链表中的重复元素【面试】
LeetCode 83题:删除排序链表中的重复元素【面试】
|
6月前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
6月前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
6月前
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点