题目描述
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
// write code here
ListNode* beforehead=nullptr;
ListNode* beforenode=nullptr;
ListNode* afterhead=nullptr;
ListNode* afternode=nullptr;
while(pHead!=nullptr)
{
ListNode* next=pHead->next;
pHead->next=nullptr;
if(pHead->val<x)
{
if(beforehead==nullptr)
{
beforehead=pHead;
beforenode=beforehead;
}
else{
beforenode->next=pHead;
beforenode=beforenode->next;
}
}
else{
if(afterhead==nullptr)
{
afterhead=pHead;
afternode=afterhead;
}
else{
afternode->next=pHead;
afternode=afternode->next;
}
}
pHead=next;
}
if(beforehead==nullptr)
return afterhead;
if(afterhead==nullptr)
return beforehead;
beforenode->next=afterhead;
return beforehead;
}
};