给你一个链表的头节点 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
通过次数22,742提交次数34,546
请问您在哪类招聘中遇到此题?
?
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* partition(struct ListNode* head, int x){
//定义两个哨兵位位两个链表的哨兵位和两个尾
struct ListNode* lesshead, * lesstail;
struct ListNode* greathead, * greatail;
lesshead = lesstail = (struct ListNode*)malloc(sizeof(struct ListNode));//分配内存
greathead = greatail =(struct ListNode*)malloc(sizeof(struct ListNode));
lesshead ->next = greathead->next =NULL;
struct ListNode* cur = head;
while(cur)
{
if(cur->val < x)
{
lesstail->next = cur;
lesstail = lesstail->next;
}
else
{
greatail->next = cur;
greatail = greatail->next;
}
cur = cur->next;
}
lesstail->next = greathead->next;
greatail ->next = NULL; //每次用完greatail要让他指向NULL不然会出现链表有环;
struct ListNode* list = lesshead->next;
free(lesshead);
free(greathead);
return list;
}
|