🚗题目描述
给你一个链表的头节点
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]
思路: 可以将该链表分为两个链表,small链表用来存放值小于x的结点,large链表用来存放其他结点,设置两个哨兵,smallhead和largehead,head进行遍历整个链表,判断值是否小于x,将结点用尾插法插在后面,最后将两个链表合并,注意将large链表的尾节点的下一位置空。
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
ListNode* smallhead = new ListNode(0);
ListNode* smalltail = smallhead;
ListNode* largehead = new ListNode(0);
ListNode* largetail = largehead;
while(head){
if(head->val < x)
{
smalltail->next = head;
smalltail = head;
}else{
largetail->next = head;
largetail = head;
}
head = head->next;
}
largetail->next=NULL;
smalltail->next = largehead->next;
ListNode* ret=smallhead->next;
delete smallhead,largehead;
return ret;
}
};