[LeetCode 86]C++实现分隔链表
要求:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
链接:https://leetcode-cn.com/problems/partition-list/ (LeetCode 86)
//方法: 利用建立两个头指针
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head==NULL)
return NULL;
ListNode* less_head=new ListNode(0);//less_head->val=0;less_head->next=NULL;
ListNode* more_head=new ListNode(0);
ListNode* pLessTail=less_head;
ListNode* pMoreTail=more_head;
while(head){
if(head->val<x){
pLessTail->next=head;//if val<x; link Less_X;
pLessTail=head;//后移
}
else if(head->val>=x){
pMoreTail->next=head;//if val>=x; link More_X;
pMoreTail=head;//后移
}
head=head->next;
}
pMoreTail->next=NULL;//尾置空
pLessTail->next=more_head->next;//Less_X link More_X
return less_head->next;//less头节点为空
}
};