题目描述:
给你一个链表的头节点 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]
提示:
- 链表中节点的数目在范围
[0, 200]
内 -100 <= Node.val <= 100
-200 <= x <= 200
通过次数
242.2K
提交次数
376.4K
通过率
64.3%
思路和题解:
设置两个指针small和large,遍历一次链表,遍历的值小于x就把该节点加入small后面,大于等于x就把该节点加入large后面。
代码:
cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
ListNode *small,*smallHead;
ListNode *large,*largeHead;
small=smallHead=new ListNode;
large=largeHead=new ListNode;
while(head)
{
if(head->val<x)
{
small->next=head;
small=small->next;
}
else
{
large->next=head;
large=large->next;
}
head=head->next;
}
large->next=NULL;
small->next=largeHead->next;
return smallHead->next;
}
};